728x90
Item1. 생성자 대신 정적 팩터리 메서드를 고려하라
- 정적 팩터리 메서드와 public 생성자는 각각의 쓰임새가 있다.
- 그래도 정적 팩터리 사용이 유리한 경우가 더 많다.
- 무작정 public 생성자를 제공하던 습관을 고치자
- Link : https://jyami.tistory.com/56
Item2. 생성자에 매개변수가 많다면 빌더를 고려하라
- 생성자나 정적 팩터리가 처리해야 할 매개변수가 많다면 빌더 패턴을 선택하는 게 더 낫다.
- 매개변수중 다수가 필수가 아니거나 같은 타입이면 특히 더 그렇다.
- 빌더는 점층적 생성자보다 클라이언트를 읽고 쓰기가 훨씬 간결하다.
- 빌더는 자바빈즈보다 훨씬 안전하다.
- Link : https://jyami.tistory.com/57
Item3. private 생성자나 열거 타입으로 싱글턴임을 보증하라
- 싱글턴 : 인스턴스를 오직 하나만 생성할 수 있는 클래스이다.
- public static 멤버가 final 필드 / 정적 팩터리 메서드를 public static 멤버로 제공 / Enum 타입 방식 으로 싱글턴을 만들 수 있다.
- 대부분 상황에서 원소가 하나뿐인 Enum이 싱글턴을 만드는 가장 좋은 방법이다.
- Link : https://jyami.tistory.com/58
Item4. 인스턴스화를 막으려거든 private 생성자를 사용하라
- 정적 메서드와 정적 필드만을 담는 클래스에서 인스턴스 화를 막을 때 private 생성자를 사용하라
- Private 생성자를 쓰지 않으면 컴파일러가 자동으로 기본 생성자를 만들어 인스턴스화가 가능해진다.
- Link : https://jyami.tistory.com/59
Item5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
- 클래스가 내부적으로 하나 이상의 자원에 의존하고, 그 자원이 클래스 동작에 영향을 준다면 싱글턴과 정적 유틸리티 클래스는 사용하지 않는 것이 좋다.
- 이 자원들을 클래스가 직접 만들게 해서도 안된다.
- 필요한 자원(그 자원을 만들어주는 팩터리를) 생성자에 (정적 팩터리나 빌더에) 넘겨주자. (의존 객체 주입)
- 클래스 유연성, 재사용성, 테스트 용이성을 개선해준다.
- Link : https://jyami.tistory.com/60
Item6. 불필요한 객체 생성을 피하라
- 같은 기능의 객체를 매번 생성하기보다 불변객체나, 정적 팩터리를 이용해 객체 하나를 재사용하라
- 생성비용이 비싼 객체가 반복해서 필요하다면 캐싱하여 재사용길 권한다.
- 어댑터 패턴에서 뒷단 객체 하나당 어댑터 하나씩만 만들어지면 충분하다.
- 박싱된 기본타입보단 기본타입을 사용하고, 의도치 않은 오토박싱이 숨어들지 않도록 주의하자
- 가벼운 객체를 다룰땐 직접 만든 객체 풀보단 GC가 훨씬 빠르다.
- Link : https://jyami.tistory.com/61
Item7. 다 쓴 객체는 참조를 해제하라
- 메모리 누수는 겉으로 잘 드러나지 않아 시스템에 수년간 잠복하는 사례도 있다.
- 이런 누수는 철저한 코드 리뷰나 힙 프로파일러 같은 디버깅 도구를 동원해야만 발견되기도 한다.
- 예방법을 알아두자 ex) LRU에서 WeakHashMap 사용
- Link : https://jyami.tistory.com/62
Item8. finalizer와 cleaner 사용을 피해라
- cleaner(자바 8까지는 finalizer)는 안전망 역할이나 중요하지 않은 네이티브 자원 회수용으로만 사용하자.
- 이런 경우에 불확실성과 성능저하에 주의해야한다.
- Link : https://jyami.tistory.com/63
Item9. try-finally 보다는 try-with-resources를 사용하라
- try-finally는 코드 가독성에 있어서 지저분하고, 두번째 예외가 첫번째 예외를 집어삼키는 경우가 있을 수 있다.
- try-with-resources는 일기 쉬워 문제 진단에 유리하며, 숨겨진 예외도 suppressed 꼬리표를 달고 출력된다.
- try-with-resources는 catch를 이용해 try 중첩없이 다수의 예외처리가 가능하다.
- Link : https://jyami.tistory.com/64
'Dev Book Review > Effective Java' 카테고리의 다른 글
[Effective Java] item11. equals를 재정의하려거든 hashCode도 재정의하라 (0) | 2020.04.19 |
---|---|
[Effective Java] item10. equals는 일반 규약을 지켜 재 정의하라 (0) | 2020.04.19 |
[Effective Java] item9. try-finally 보다는 try-with-resources를 사용하라 (0) | 2020.04.15 |
[Effective Java] item8. finalizer와 cleaner 사용을 피해라 (0) | 2020.04.15 |
[Effective Java] item7. 다 쓴 객체 참조를 해제하라 (0) | 2020.04.15 |