[Item 73] 추상화 수준에 맞는 예외를 던져라
2022. 12. 31. 18:32
책/effectiveJava
이런 상황이 있다고 가정 해보자! 저수준 예외를 처리 하지 않으면서, 그대로 바깥으로 전파할 때 생기는 일?예외 발생 시, 수행하려는 일과 관련 없어 보이는 예외가 나올 수도 있다. → 어떤 로직 에서 이러한 예외가 발생했는지 파악하기가 힘들어져 디버깅 이 어려워진다그리고 보통(?) 이 예외와 관련된 예외 메시지를 응답으로 보내주기 때문에, 사용자 입장에서는 뜬금없는 SQLException 과 관련된 에러 메시지를 응답으로 받게 될 수도 있다..고 생각한다.내부 구현 방식을 드러낸다이를 사용하는 클라이언트가 오염된다. 다음 릴리즈 에서 내부 구현을 변경하며 예외도 달라지 면, 이를 사용하던 기존 코드가 깨진다.저수준 예외를 처리하지 못한다면, 어떻게 해줘야 할까?예외가 발생하면 우리는 흔히들 아래와 같이..
Item 53 : 가변인수는 신중히 사용하라
2022. 8. 24. 13:33
책/effectiveJava
가변인수가 등장하기 전에는? varargs 는 Java 5 에 도입되었다. 그렇다면 그 이전에는 “임의 개수의 인자가 전달되어 올 수 있는 상황" 에 대해 어떻게 다루고 있었을까? 배열을 받는 메소드 → 명시적으로 배열을 인자로 받는 메소드 선언 public int sum(int[] args) { ... } N 개의 메소드를 선언 ( 1개,2개,3개,…. 인자를 받는 메소드들) public int sum() { ... } public int sum(int value) { ... } public int sum(int val1, int val2) { ... } 가변인수? 가변인수 명시한 타입의 인수를 “0개 이상" 받을 수 있다. 가변인수 메소드 호출시 무조건 “배열을 생성" 하여 인수들을 배열에 저장하여 ..
[effective java] Item34 : int const 대신 열거타입(enum 사용) + 그리고 State pattern
2022. 1. 22. 22:35
책/effectiveJava
Item34 : int constant대신 enum을 사용하라 JAVA에서는 두 가지 특별한 reference type을 제공하고 있다. class의 일종인 enum type interface의 일종인 annotation type 기존에는 어떠했나? 정수 열거패턴, int enum pattern 이라고 알려진 기법을 사용했다. named [ int constant ]의 그룹을 선언하여 사용했다. ( JAVA에서는 static final로 선언 ) public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int ORANGE_NAVEL = 0; public static final in..