클래스는 생성자와 별도로 정적 팩터리 메서드를 제공할 수 있다는 것을 염두해두고 필요한 경우 사용하자!

정적 팩터리 메서드의 장점

1. 이름을 가질 수 있음

2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다.

3. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다.

interface SmarPhone {}

class Galaxy implements SmarPhone {}
class IPhone implements SmarPhone {}
class Huawei implements SmarPhone {}

class SmartPhones {
    public static SmarPhone getSamsungPhone() {
        return new Galaxy();
    }

    public static SmarPhone getApplePhone() {
        return new IPhone();
    }

    public static SmarPhone getChinesePhone() {
        return new Huawei();
    }
}

4. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.