일반적인 프로그래밍 원칙
-
지역변수의 범위를 최소화하라
-
전통적인 for 문보다는 for-each문을 사용하라
-
전통적인 for 문과 비교했을 때 for-each문은 명료하고, 유연하고, 버그를 예방해 준다. 성능 저하도 없다. 가능한 모든 곳에서 for문이 아닌 for-each 문을 사용하자.
-
-
라이브러리를 익히고 사용하라
-
바퀴를 다시 발명하지 말자. 아주 특별한 나만의 기능이 아니라면 누군가 이미 라이브러리 형태로 구현해놓았을 가능성이 크다. 그런 라이브러리가 있다면, 쓰면 된다. 있는지 잘 모르겠다면 찾아보라. 일반적으로 라이브러리의 코드는 여러분이 직접 작성한 것 보다 품질이 좋고, 점차 개선될 가능성이 크다. 여러분의 실력을 폄하하는 게 아니다. 코드 품질에도 규모의 경제가 적용된다. 즉, 라이브러리 코드는 개발자가 각자가 작성하는 것보다 주목을 휠씬 많이 받으므로 코드 품질도 그만큼 높아진다.
-
-
정확한 답이 필요하다면 float와 double은 피하라
-
정확한 답이 필요한 계산에는 float나 double을 피하라. 소수점 추적은 시스템에 맡기고, 코딩 시의 불편함이나 성능 저하를 신경 쓰지 않겠다면 BigDecimal을 사용하라. BigDecimal이 제공하는 여덟 가지 반올림 모드를 이용하여 반올림을 완벽히 제어 할 수 있다. 법으로 정해진 반올림을 수행해야 하는 비즈니스 계산에서 아주 편리한 기능이다. 반면, 성능이 중요하고 수소점을 직접 추적할 수 있고 숫자가 너무 크지 않다면 int 나 long을 사용하라. 숫자를 아홉 자리 십진수로 표현할 수 있다면 int를 사용하고, 열여덟 자리 십진수를 표현할 수 있다면 long을 사용하라. 열여덟 자리를 넘어가면 BigDecimal을 사용해야 한다.
-
-
박싱된 기본 타입보다는 기본타입을 사용하라
-
기본 타입과 박싱된 기본 타입중 하나를 선택해야 한다면 가능하면 기본 타입을 사용하라. 기본 타입은 간단하고 빠르다. 박싱된 기본 타입을 써야 한다면 주의를 기울이자. 오토박싱이 박싱된 기본 타입을 사용할 때의 번거로움을 줄여주지만, 그 위험까지 없애주지는 않는다. 두 박싱된 기본 타입을 == 연산자로 비교하면다면 식별성 비교가 이뤄지는 데, 이는 여러분이 원한 게 아닐 가능성이 크다. 같은 연산에서 기본 타입과 박싱된 기본 타입을 혼용하면 언방식이 이뤄지며, 언박싱 과정에서 NullPointerException을 던질 수 있다. 마지막으로, 기본 타입을 박싱하는 작업은 필요 없는 객체를 생성하는 부작용을 나을 수 있다.
-
-
다른 타입이 적절하다면 문자열 사용을 피하라
-
더 적합한 데이터 타입이 있거나 새로 작성할 수 있다면, 문자열을 쓰고 싶은 유혹을 뿌리쳐라. 문자열은 잘못 사용하면 번거롭고, 덜 유연하고, 느리고, 오류 가능성도 크다. 문자열을 잘못 사용하는 흔한 예로는 기본 타입, 열거 타입, 혼합 타입이 있다.
-
-
문자열 연결은 느리니 주의하라
-
원칙은 간단하다. 성능에 신경 써야 한다면 많은 문자열을 연결할 때는 문자열 연결 연산자(+)를 피하자. 대신 StringBuilder의 append 메서드를 사용하라. 문자 배열을 사용하거나, 문자열(연결하지 않고) 하나씩 처리하는 방법도 있다.
-
-
객체는 인터페이스를 사용해 참조하라
-
리플렉션보다는 인터페이스를 사용하가
-
리플렉션은 복잡한 특수 시스템을 개발할 때 필요한 강력한 기능이지만, 단점도 많다 컴파일타임에는 알 수 없는 클래스를 사용하는 프로그램을 사용한다면 리플렉션을 사용해야 할 것이다. 단, 되도록 객체 생성에만 사용하고, 생성한 객체를 이용할 때는 적절한 인터페이스나 컴파일타임에 알 수 있는 상위 클래스로 형변환해 사용해야 한다.
-
-
네이티브 메서드는 신중히 사용하라
-
네이티브 메서드를 사용하려거든 한번 더 생각하라. 네이티브 메서드가 성능을 개선해 주는 일은 많지 않다. 저수준 자원이나 네이티브 라이브러리를 사용해야만 해서 어쩔 수 없더라도 네이티브 코드는 최소한만 사용하고 철저히 테스트 하라. 네이트브 코드 안에 숨은 단 하나의 버그가 여러분 애플리케이션 전체를 훼손할 수도 있다.
-
-
최적화는 신중히 하라
-
빠른 프로그램을 작성하려 안달하지 말자. 좋은 프로그램을 작성하다 보면 성능은 따라오게 마련이다. 하지만 시스템을 설계할 때, 특히 API, 네트워크 프로토콜, 영구 저장용 데이터 포맷을 설계할 때는 성능을 염두에 두어야 한다. 시스템 구현을 완료했다면 이제 성능을 측정해 보라. 충분히 빠르면 그것으로 끝이다. 그렇지 않다면 프로파일러를 사용해 문제의 원인이 되는 지점을 찾아 최적화를 수행하라. 가장 먼저 어떤 알고리즘을 사용했는지를 살펴보자. 알고리즘을 잘못 골랐다면 다른 저수준 최적화는 아무리 해봐야 소용이 없다. 만족할 때까지 이 과정을 반복하고, 모든 변경 후에는 성능을 측정하라.
-
-
일반적으로 통용되는 명명규칙을 따르라.
-
표준 명명 규칙을 체화하여 자연스럽게 베어 나오도록 하자. 철자 규칙은 직관적이라 모호한 부분이 적은 데 반해, 문법 규칙은 더 복잡하고 느슨하다. 자바 언어 명세[JLS, 6.1]의 말을 인용하자면 "오랫동안 따라온 규칙과 충돌한다면 그 규칙을 맹종해서는 안된다" 상식이 이끄는 대로 따르자.
-
참조서적 및 페이지 :
- 이펙티브 자바 Effective Java 3/E (http://www.yes24.com/Product/Goods/65551284)
- https://meetup.toast.com/posts/185
'백엔드 > Java' 카테고리의 다른 글
디자인 패턴 - 템플릿 메서드 패턴이란? (0) | 2019.09.28 |
---|---|
Effective Java 맛보기 11탄 (0) | 2019.09.21 |
Effective Java 맛보기 10탄 (0) | 2019.09.21 |
Effective Java 맛보기 9탄 (0) | 2019.09.21 |
Effective Java 맛보기 7탄 (0) | 2019.09.20 |
Effective Java 맛보기 6탄 (0) | 2019.09.20 |
Effective Java 맛보기 5탄 (0) | 2019.09.17 |
Effective Java 맛보기 4탄 (0) | 2019.09.16 |
댓글