팩토리 메서드 패턴

심야·2022년 11월 17일
0

웹 개발

목록 보기
23/47

팩토리 메서드 패턴

객체 지향에서 팩토리(공장)는 객체를 생성한다. 결국 팩토리 메서드는 객체를 생성해 반환하는 메서드를 말한다. 하위 클래스에서 팩토리 메서드를 오버라이딩해서 객체를 반환하게 하는 것을 팩토리 메서드 패턴이라 부른다.

Example

Animal.java

package factoryMethodPattern;

public abstract class Animal {
    // 추상 팩터리 메서드
    abstract AnimalToy getToy();
}

AnimalToy.java

package factoryMethodPattern;

// 팩터리 메서드가 생성할 객체의 상위 클래스
public abstract class AnimalToy {
    abstract void identify();
}

Dog.java

package factoryMethodPattern;

public class Dog extends Animal{
    // 추상 팩터리 메서드 오버라이딩
    @Override
    AnimalToy getToy(){
        return new DogToy();
    }
}

DogToy.java

package factoryMethodPattern;

// 팩터리 메서드가 생성할 객체
public class DogToy extends AnimalToy {
    public void identify() {
        System.out.println("나는 테니스 공! 강아지 친구!");
    }
}

Cat.java

package factoryMethodPattern;

public class Cat extends Animal{
    // 추상 팩터리 메서드 오버라이딩
    @Override
    AnimalToy getToy(){
        return new CatToy();
    }
}

CatToy.java

package factoryMethodPattern;

// 팩터리 메서드가 생성할 객체
public class CatToy extends AnimalToy{
    @Override
    public void identify(){
        System.out.println("나는 캣타워! 고양이 친구~!");
    }
}

Driver.java

package factoryMethodPattern;

public class Driver {
    public static void main(String[] args) {
        // 팩터리 메서드 보유한 객체들 생성
        Animal bolt = new Dog();
        Animal kitty = new Cat();

        // 팩터리 메서드가 반환하는 객체들
        AnimalToy boltBall = bolt.getToy();
        AnimalToy kittyTower = kitty.getToy();

        // 팩터리 메서드가 반환한 객체들 사용
        boltBall.identify();
        kittyTower.identify();
    }
}

실행 결과

나는 테니스 공! 강아지 친구!
나는 캣타워! 고양이 친구~!

코드 흐름은 아래와 같다.

new Dog(); new 연산자를 사용해 Dog 객체를 생성한다. Dog 객체는 팩토리 메서드인 getToy를 보유하고 있다.
오버라이딩 한 팩토리 메서드 getToy를 사용해 DogToy 객체를 반환한다.
반환받은 DogToy 객체를 사용해 identify() 메서드를 호출한다.

결국 팩토리 메서드 패턴은 오버라이드된 메서드가 객체를 반환하는 패턴이다.

출처

스프링 입문을 위한 객체지향의 원리와 이해

profile
하루하루 성실하게, 인생 전체는 되는대로.

0개의 댓글