개발 etc

JAVA 자바 팩터리 메서드 패턴(Factory Method Pattern)

알통몬_ 2017. 3. 12. 20:54
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

객체 지향에서 팩터리는 객체를 생성해요. 

따라서 팩터리 메서드는 객체를 생성 반환하는 메서드입니다. 

여기에 패턴이 붙으면 하위 클래스에서 팩터리 메서드를 오버라이딩해서 

객체를 반환하게 하는 것을 의미합니다.


이전 포스팅에서 강아지,고양이와 노는 코드를 작성해봤었죠?

여기서 좀 더해서 볼트와 키티가 각자 가지고 놀고 싶어하는 장난감을 가져온다고 해보면,

볼트는 강아지 장난감을, 키티는 고양이 장난감을 가져오겠죠?


바로 예제로 보겠습니다.


예제0)

package factoryMethodPattern;


public abstract class Animal {

// 추상 팩터리 메서드

abstract AnimalToy getToy();

}

예제1)

package factoryMethodPattern;


// 팩터리 메서드가 생성할 객체의 상위 클래스

public abstract class AnimalToy {

abstract void identify();

}

예제2)

package factoryMethodPattern;


public class Dog extends Animal {

// 추상 팩터리 메서드 오버라이딩

@Override

AnimalToy getToy() {

return new DogToy();

}

}

예제3)

package factoryMethodPattern;


//팩터리 메서드가 생성할 객체

public class DogToy extends AnimalToy {

public void identify() {

System.out.println("나는 테니스공! 강아지의 친구!");

}

}

예제4)

package factoryMethodPattern;


public class Cat extends Animal {

// 추상 팩터리 메서드 오버라이딩

@Override

AnimalToy getToy() {

return new CatToy();

}

}

예제5)

package factoryMethodPattern;


//팩터리 메서드가 생성할 객체

public class CatToy extends AnimalToy {

@Override

public void identify() {

System.out.println("나는 캣타워! 고양이의 친구!");

}

}

예제6)

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();

}

}


팩터리 메서드 패턴은

-오버라이드된 메서드가 객체를 반환하는 패턴- 입니다.

그리고 SOLID 설계 원칙 중에서 DIP 의존 역전 원칙을 활용하고 있습니다.

반응형