Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 회원가입
- Loopback api
- loopback document
- AWS 가입
- Java
- 루프백
- the public type
- loopback 설치
- AWS
- loopback
- StrongLoop
- java error
- 자바
- Loopback 모델
- Amazon
- 아마존
- error
Archives
- Today
- Total
퍄퍄
[아이템1] 생성자 대신 정적 팩토리 메소드를 고려하라 본문
책에서는 클래스가 클라이언트에 인스턴스를 제공하는 두 가지 방식을 설명한다.
- public 생성자를 통해 제공
- 정적 팩토리 메소드를 통한 인스턴스 반환
정적 팩토리 메소드가 사용함에 있어 유리한 경우가 더 많지만
정적 팩토리 메소드와 public 생성자는 각각의 쓰임새가 있어 public 생성자의 장점과 단점을 나열한다.
- 이름을 가질 수 있다.
- 생성자를 통한 객체 반환을 사용할 경우 반환 객체의 특성을 쉽게 알기 힘들며
한 클래스에 시그니처가 같은 생성자가 여러 개 필요할 경우, 특성을 표현하기 쉬운 네이밍으로
여러 개의 정적 팩토리 메소드를 만들어 쓰는 것을 추천한다. - 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다.
- 불필요한 객체 생성을 피할 수 있으므로 생성 비용이 큰, 같은 객체를 자주 요청하는 상황이라면 성능면에서 효율적일 수 있다. - 반환 타입의 하위 객체를 반환할 수 있는 능력이 있다.
- 반환할 객체의 클래스를 자유롭게 선택할 수 있는 유연성을 준다.
API를 만들 때 이 유연성을 이용하면 구현 클래스를 공개하지 않고도 해당 객체를 반환할 수 있으며
이는 인터페이스를 정적 팩토리 메소드의 반환 타입으로 사용하는 인터페이스 기반 프레임워크를 만드는
핵심 기술이다. - 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.
- 반환 타입의 하위 타입이기만 하면 어떤 클래스를 반환해도 상관 없으므로
메소드별로 다른 클래스의 객체를 반환할 수 있다. - 정적 팩토리 메소드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.
단점
- 상속을 하려면 public, protected 생성자가 필요하니 정적 팩토리 메소드만 제공하면 하위 클래스를 만들 수 없다.
- 정적 팩토리 메소드는 프로그래머가 찾기 어렵다.
- 생성자처럼 API 설명에 명확히 드러나지 않으므로 정적 팩토리 메소드 방식의 클래스를 인스턴스할 방법을 찾아 야 한다.
정적 팩토리 메소드에 사용하는 명명방식
- from : 매개변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형변환 메소드
- of : 여러 매개변수를 받아 타입의 적합한 인스턴스를 반환하는 집계 메소드
- valueOf : from 과 of 의 더 자세한 버전
- instance, getInstance : (매개변수를 받는다면) 매개변수로 명시한 인스턴스를 반환하지만 같은 인스턴스를 보장하 지는 않는다.
- create, newInstance : instance, getInstance 와 동일하지만 매번 새로운 인스턴스를 반환한다고 보장한다.
- getType : getInstance 와 동일하지만, 생성할 클래스가 아닌 다른 클래스에 팩토리 메소드를 정의할 때 사용한다. "Type"은 팩토리 메소드가 반환할 객체의 타입이다.
- newType : newInstance 와 동일하지만, 다른 클래스에 팩토리 메소드를 정의할 때 사용한다. "Type"은 팩토리 메소드가 반환할 객체의 타입이다.
- type : getType, newType 의 간결한 버전
'Java > Effective Java' 카테고리의 다른 글
[아이템12] toString을 항상 재정의하라 (0) | 2020.04.09 |
---|---|
[아이템5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2020.04.01 |
[아이템4] 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2020.03.22 |
[아이템3] private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2020.03.22 |