객체 생성과 파괴 (feat. 이펙티브자바-2)
객체의 생성과 파괴를 다루겠다.
1. 생성자 대신 정적 팩터리 메서드를 고려
public static boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } |
< 장점 >
- 이름을 가진다.
- 호출될 때마다 인스턴스를 새로 생성하지 않는다.
- 반환 타입의 하위 타입 객체를 반환할 수 있다.
- 매개변수에 따라 다른 객체를 반환할 수 있다.
< 단점 >
- 상속을 하려면 public이나 protected 생성자가 필요하니, 정적 팩터리 메서드만 제공하면 하위클래스를 만들 수 없다.
- 프로그래머가 찾기 힘들가
< 자주 사용하는 방식 >
- of : 매개변수 n개 / 받아 적합한 인스턴스를 반환
Set<Rank> faceCards = EnumSet.of(JACK, QUEEN, KING); |
- from : 매개변수 1개 / 해당 타입의 인스턴스로 변환
Date d = Date.from(instant) |
- valueOf : from/of 의 더 자세한 버전
BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE); |
- 1. instance(매개변수X) /getInstance(매개변수O) : 인스턴스 반환, 같은인스턴스 보장X
StackWaler luke = StackWaler.getInstance(option); |
- 2. create/newInstance : 새로운 인스턴스 생성 후 반환
Object newArray = Array.newInstance(classObject, arrayLen); |
'공부 > 이펙티브자바' 카테고리의 다른 글
14. Comparable을 구현할지 고려하라 (0) | 2022.03.18 |
---|---|
12. toString을 항상 재정의하라 (0) | 2022.03.18 |
5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하기 (0) | 2022.03.18 |
64. 객체는 인터페이스를 사용해 참조하라 (0) | 2022.03.17 |
3. private 생성자나 열거타입으로 싱글턴임을 보증 (0) | 2022.03.03 |
댓글