- 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. (인터페이스 기반 프레임워크, 인터페이스에 정적 메소드)
- HelloService 인터페이스의 of 메소드가 이에 해당함. of 메소드의 반환 타입은 **HelloService**이지만 실제로 반환하는 건 **HelloService**를 구현한 **KoreanHelloService**나 **EnglishHelloService**의 인스턴스. 이런 방식은 인터페이스 기반 프레임워크에서 많이 쓰이며, 반환되는 객체의 실제 클래스를 숨기고 인터페이스로만 다루는 방식을 가능하게 함.
- 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.(EnumSet)
- **HelloService**의 of 메소드는 입력 매개변수 lang의 값에 따라 다른 클래스(KoreanHelloService 또는 EnglishHelloService)의 인스턴스를 반환함. 이것은 입력 매개변수에 따라 반환되는 객체의 타입이 다를 수 있음을 보여줌.
package org.example;
public interface HelloService {
public String hello();
static HelloService of(String lang){
if(lang.equals("ko")){
return new KoreanHelloService();
}else {
return new EnglishHelloService();
}
}
}
- 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.
3,4 번은 이해가 되는데, 5번은 도통 이해가 되지 않는다.
인강에서는 다른 프로젝트 내에서 ChineseHelloService를 만들어서 ni hao를 출력하게끔 설정했고,
다시 본 프로젝트에서 ChineseHelloService를 import 혹은 의존하지 않고 ni hao를 출력하게 만들었다.
강사는 이것이 그저 new ChineseHelloService를 하는것과는 큰 차이가 있다고 하는데, 큰 차이점을 느끼지는 못했다.
언젠간 이해할 수 있겠지
'하루 한장 > 이펙티브 자바' 카테고리의 다른 글
아이템 1. 핵심 정리 - 정적 팩터리 메서드의 단점 (0) | 2023.07.25 |
---|---|
정적 팩터리 메서드의 장점2 (0) | 2023.07.23 |
정적 팩터리 메서드의 장점1 (0) | 2023.07.23 |