객체 생성과 파괴
-
생성자 대신 정적 팩토리 메서드를 고려하라.
-
정적 팩토리 메서드와 public 생성자는 각자의 쓰임새가 있으니 상대적인 장단점을 이해하고 사용하는 것이 좋다. 그렇다고 하더라도 적정 팩토리를 사용하는 게 유리한 경우가 더 많으므로 무작정 public 생성자를 제동하던 습관이 있다면 고치자.
-
-
생성자에 매개변수가 많다면 빌더를 고려하라.
-
생성자나 정적 팩토리가 처리해야 할 매개변수가 많다면 빌더 패턴을 선택하는 게 더 낫다, 매개변수 중 다수가 필수가 아니거나 같은 타입이면 특히 더 그렇다. 빌더는 점층적 생성자보다 클라이언트 코드를 읽고 쓰기가 휠씬 간결하고, 자바빈즈보다 휠씬 안전하다.
-
-
private 생성자나 열거 타입으로 싱글턴임을 보증하라.
-
인스턴스화를 막으려거든 private 생성자를 사용하라.
-
자원을 직접 명시하지 말고 의존 객체 주입을 사용하라.
-
클래스가 내부적으로 하나 이상의 자원에 의존하고, 그 자원이 클래스 동작에 영향을 준다면 싱글톤과 정적 유틸리티 클래스는 사용하지 않는 것이 좋다. 이 자원들을 클래스가 직접 만들게 해서도 안 된다. 대신 필요한 자원을 (혹은 그 자원을 만들어주는 팩토리를) 생성자에 (혹은 정적 팩토리나 빌더에) 넘겨주자. 의존 객체 주입이라 하는 이 기법은 클래스의 유연성, 재사용성, 테스트 용이성을 기막히게 개선해 준다.
-
-
불필요한 객체 생성을 피하라.
-
다 쓴 객체 참조를 해제하라.
-
다 쓴 객체 참조를 null 로 만들어라.
-
-
finalizer 와 cleaner 사용을 피하라.
-
cleaner( 자바 8까지는 finalizer) 는 안정망 역할이나 중요하지 않은 네이티브 자원 회수용으로만 사용하자. 물론 이런 경우라도 불확실성과 성능 저하에 주의해야 한다.
-
-
try-finally 보다는 try-with-resources 를 사용하라.
-
꼭 회수해야 하는 자원을 다룰 때는 try-finally 말고, try-with-resources 를 사용하자. 예외는 없다. 코드는 더 짧고 분명해지고, 만들어지는 예외정보도 휠씬 유용하다. try-finally 로 작성하면 실용적이지 못할 만큼 코드가 지저분해지는 경우라도, try-with-resources 로는 정확하고 쉽게 자원을 회수할 수 있다.
-
참조서적 : 이펙티브 자바 Effective Java 3/E (http://www.yes24.com/Product/Goods/65551284)
'백엔드 > Java' 카테고리의 다른 글
Effective Java 맛보기 5탄 (0) | 2019.09.17 |
---|---|
Effective Java 맛보기 4탄 (0) | 2019.09.16 |
Effective Java 맛보기 3탄 (0) | 2019.09.15 |
Effective Java 맛보기 2탄 (0) | 2019.09.15 |
Spring Data Redis - Jedis vs Lettuce (0) | 2019.08.18 |
리팩토링 맛보기 1탄 (0) | 2019.08.11 |
JUnit 4.5 에러 (0) | 2019.03.13 |
Spring @Autowired 사용시 주의점 (0) | 2019.03.11 |
댓글