Skip to content

헤드 퍼스트 디자인패턴정리

Crow edited this page May 2, 2022 · 2 revisions

디자인 패턴 소개

소프트웨어 개발에 있어서 바뀌지 않는것은 변화이다
애플리케이션을 아무리 잘 디자인해도 시간이 지나면서 점점 성장하고 변화해야함 그렇지 않는다면 그 앱은 죽어버림 TNT

스트레티지 패턴

디자인 원칙 : 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리 시킨다.
ex:바뀌는 부분은 따로 뽑아서 캡슐화 시킴
(그렇게 하면 바뀌지 않는 부분에는 영향을 미치지 않은 채로 그 부분만 고치거나 확장가능)
이 개념은 매우 간단하지만 다른 모든 디자인 패턴의 기반을 이루는 원칙임
(모든 패턴은 시스템의 일부분을 다른 부분과 독립적으로 변화 시킬수 있는방법을 제공하기 위한것)

인터페이스에 맞춰서 프로그래밍 한다는 것은 사실 상위 형식에 맞춰서 프로그래밍한다는 것을 뜻함
이말은 즉 실제 실행시에 쓰이는 객체가 코드에 의해서 고정되지 않도록,
어떤 상위형식(supertype)에 맞춰서 프로그래밍함으로써 다형성을 활요해야함
그리고 상위 형식에 맞춰서 프로그래밍 하라는 원칙은
변수를 선언할 때는 보통 추상 클래스나 인터페이스 같은 상위 형식으로 선언해야 한다
객체를 변수에 대입할 때 상위 형식을 구체적으로 구현한 형식이라면 어떤 객체든 집어넣을 수 있기 때문이다

다형적인 형식을 사용하는 간단한 예제 코딩 한다면 다음과 같이 가능함

public interface Animal {
    public void makeSound();
}

public class Cat implements Animal{
    @Override
    public void makeSound() {
        System.out.println("냐옹카이");
    }
}

public class Dog implements Animal {

    @Override
    public void makeSound() {
        System.out.println("멍멍");
    }
}

package Animal;

public class MyPet {

    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();

        dog.makeSound();
        cat.makeSound();
    }
}

쉬운 문제를 해결할때는 이방법도 좋지만 책에 상세 구현된 오리의 행동 테스트 쪽 방법이 사용할때 매리트가 많아 보임

정리하자면 스트레티지 패턴이란 알고리즘을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만드는것
스트레티지 패턴을 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할수있음.

옵저버 패턴

객체들한테 연락하기