Chapter9 일반적인 프로그래밍 원칙
1. 지역변수의 범위를 최소화하라
- 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고, 오류 가능성이 낮아진다.
- 가장 처음 쓰일 때 선언
- for문이 while문보다 오류가능성(복붙할 때)이 낮다
2. 전통적인 for 문보다는 for-each 문을 사용하라
- for문보다는 for-each문이 명료하고, 유연하며 버그를 예방해 준다.
3. 라이브러리를 익히고 사용하라
- 표준 라이브러리를 사용하여 좀 더 안정성이 있는 코드를 작성할 수 있다.
- 표준 라이브러리는 계속 업데이트 되므로, 따로 노력을 하지 않아도 성능이 지속해서 개선된다.
- 또한, 작성한 코드가 다른 사람들이 쉽게 이해할 수 있게 된다.
4. 정확한 답이 필요하다면 float와 double은 피하라
float
과double
은 정밀한 근사치로 계산하도록 설계되어있으므로 정확한 답이 필요할 때 사용하면 안된다.
5. 박싱된 기본 타입보다는 기본 타입을 사용하라
- 기본 타입 :
int
,long
,boolean
, etc - 박싱된 기본 타입 :
Integer
,Long
,Boolean
, etc- 차이점
- 박싱된 기본 타입은 식별성을 가지고 있다. → 두 인스턴스의 값이 같아도 다르게 인식할 수 있음
- 박싱된 기본 타입은 null 값을 가질 수 있다.
- 박싱된 기본 타입은 기본 타입보다 시간과 메모리 사용면에 효율적이지 않다.
- 차이점
- 박싱된 기본 타입은 언박싱 과정에서
NullPointerException
을 발생시킬 수 있다.
6. 다른 타입이 적절하다면 문자열 사용을 피하라
7. 문자열 연결은 느리니 주의하라
- 문자열은 불변하는 객체이므로 문자열 연결 시에 각각을 복사하여 새로 작성을 해야 한다.
- 참고로 문자열 n를 잇는 시간은 $n^2$에 비례한다.
8. 객체는 인터페이스를 사용해 참조하라
- 적합한 인터페이스가 있으면 클래스 타입보다는 인터페이스 타입을 사용하여야한다.
- 프로그램을 훨씬 유연하게 사용하기 위해서
- ex)
List<Integer> list = new LinkedList<>() (o)
,LinkedList<Integer> list = new LinkedList<>() (x)
9. 리플렉션보다는 인터페이스를 사용하라
- 리플렉션은 구체적인 클래스 타입을 몰라도 메소드, 타입, 변수들에 접근할 수 있도록 해주는 기능
- 리플렉션은 컴파일 타임에 타입 검사를 할 수 없으며, 성능이 떨어진다.
- 또한 코드의 길이가 장황하게 길어진다.
10. 네이티브 메서드는 신중히 사용하라
- 네이티브 메서드는 C나 C++ 같은 언어로 작성된 메서드를 의미한다.
- 단점
- 이식성이 낮다.
- 디버깅이 어렵다.
- 가비지 컬렉터가 메모리를 자동 회수를 하지 못한다.
- 단점
- 고성능을 요구하는 다중 정밀 연산이 필요한 경우에는 사용해도 되는데, 흔치 않다.
11. 최적화는 신중히 하라
12. 일반적으로 통용되는 명명 규칙을 따르라
※ 참고
- 이펙티브 자바 - 조슈아 블로크