본문 바로가기
공부/이펙티브자바

1. 생성자 대신 정적 팩터리 메서드를 고려하자

by JERO__ 2022. 3. 3.

객체 생성과 파괴 (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);

 

댓글