• 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. (인터페이스 기반 프레임워크, 인터페이스에 정적 메소드)
    • 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를 하는것과는 큰 차이가 있다고 하는데, 큰 차이점을 느끼지는 못했다.

언젠간 이해할 수 있겠지

+ Recent posts