<
디자인 패턴 - 펙터리 메서드 패턴
>
🌠다음 포스팅🌠

디자인 패턴 - 탬플릿 콜백 패턴
☄이전 포스팅☄

디자인 패턴 - 템플릿 메서드 패턴
스프링이 가지는 대표적인 디자인 패턴에 대해 알아보자

🚀 스프링에서 디자인 패턴의 중요성

디자인 패턴은 실제 개발 현장에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 가장 효율적인 예시를 정리한 패턴의 집합이다.

🌠 팩터리 메서드 패턴 - 의존 역전 원칙(DIP)

객체 지향에서 팩터리는 객체를 생성한다

결국 팩터리 메서드객체를 생성 반환하는 메서드 이다.

더 나아가 패턴 이라는 접미사가 따라온다면 상위클라스에서 생성한 메서드를 하위클라스에서 오버라이딩 하여 객체를 반환하게 하는 것을 의미한다.

싱글톤 패턴 - 적용 후

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

public abstract class AnimalToy {
    abstract void identify();
}

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

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

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

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

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

010

011

🌠 정리

오버라이드된 메서드가 객체를 반환하는 패턴

![012](https://user-images.githubusercontent.com/65659478/159110356-253d56ab-7a03-4150-ae3c-729f57711f67.jpg)
![013](https://user-images.githubusercontent.com/65659478/159110357-ee670925-344e-4ed9-8277-9c795c24d7b2.jpg)
![014](https://user-images.githubusercontent.com/65659478/159110358-2bf2894d-e2ed-4224-9afa-bbbfa764c327.jpg)

🧾 Reference

Top
Foot