Computer Science/Design Pattern 6

관찰자패턴 (Observer Pattern) 옵저버 패턴은 객체의 상태 변화를 관찰하는 옵저버를 객체에 등록하여 상태 변화가 있을때마다 notify를 통해 객체가 관찰자들에게 알림을 보내는 패턴을 말합니다. 쉽게 말해서 어떤 이벤트가 일어나는 것을 감시하는 패턴입니다. 옵저버 패턴을 활용하면 다른 객체의 상태 변화를 별도의 함수 호출 없이 즉각적으로 알 수 있습니다. 따라서 이벤트에 대한 처리를 자주 해야하는 프로그램이라면 매우 효율적일 수 있습니다. public class AppMain { /* * 예제의 설정 * 가장 보편적인 설정이라고 볼 수 있는 Youtuber와 Subscriber들의 관계로 예제를 설정하였습니다. * Youtuber가 새로운 영상을 올리거나, 공지를 등록하는 것을 모두 notify 함수로 개념을 통일하여서 작성하였습니다... Computer Science/Design Pattern 2023. 1. 29.
전략패턴 (Strategy Pattern) 특정한 계열 또는 행위를 Interface로 캡슐화하고 구체적으로 구현된 알고리즘을 상호 교체가 가능하도록 만드는 패턴입니다. 전략패턴을 사용하면 기능이 추가 또는 변경 되더라도 기존 클래스의 수정이 아닌 Interface의 구현을 통해 확장하여 해결 할 수 있어 OCP 원칙을 지킬 수 있습니다. Context는 전략을 실제로 사용하는 사용자의 입장입니다. 이때 A라는 상황에는 ConcreateStrategy1, B라는 상황에는 ConcreateStrategy2를 사용하도록 구성할 수 있습니다. public class AppMain { /* * 예제의 설정 * Android와 Ios Mobile 개발자가 있는데 각각 프로젝트에서 2가지 언어를 사용한다는 가정입니다. * 인스턴스가 개발자의 숫자를 의미하도.. Computer Science/Design Pattern 2023. 1. 29.
Singleton Pattern 인스턴스가 오직 1개만 생성되야 하는 경우에 사용되는 패턴입니다. 시스템 런타임, 환경 세팅에 대한 정보 등 인스턴스가 여러개일 때 문제가 생길 수 있는 상황에서 싱글턴 패턴을 사용합니다. 인스턴스가 1개만 생성되는 특징을 가진 싱글턴 패턴을 이용하면 하나의 인스턴스를 메모리에 등록해서 여러 스레드가 동시에 해당 인스턴스를 공유하여 사용하게끔 할 수 있으므로 요청이 많은 곳에서 사용하면 효율을 높일 수 있습니다. 싱글턴을 만들때 동시성(Concurrency) 문제를 고려해서 싱글턴을 설계해야합니다. 싱글턴을 사용하는 방법과 문제점을 알아보고 해결방법을 알아보겠습니다. 1. Eager Initialization public class SingletonEagerInit { private static Sing.. Computer Science/Design Pattern 2022. 1. 15.
[Design Pattern] Proxy Pattern 프록시는 대리인이라는 뜻으로 무엇인가를 대신 처리하는 의미입니다. 프록시 패턴은 프록시를 사용하는 방법 중에서 타깃에 대한 접근 방법을 제어하려는 목적을 가진 경우를 가리킵니다. 프록시 패턴의 프록시는 타깃의 기능을 확장하거나 추가하지 않습니다. 대신 클라이언트가 타깃에 접근하는 방식을 변경해주는 역할을 합니다. 타깃 오브젝트를 생성하기가 복잡하거나 당장 필요하지 않은 경우에는 꼭 필요한 시점까지 오브젝트를 생성하지 않는 편이 좋습니다. 그런데 타깃 오브젝트에 대한 레퍼런스가 미리 필요할 수 있습니다. 이럴 때 프록시 패턴을 적용하면 됩니다. 클라이언트에게 타깃에 대한 레퍼런스를 넘겨야 하는데, 실제 타깃 오브젝트는 만드는 대신 프록시를 넘겨주는 방식입니다. 그리고 프록시의 메소드를 통해 타깃을 사용하려.. Computer Science/Design Pattern 2021. 8. 18.
[Design Pattern] Template Method Pattern 상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법입니다. 변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장할 기능은 서브클래스에서 만들도록 합니다. 알고리즘의 구조를 정의하고, 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의 하는 패턴입니다. 쉽게 말해 전체 구조는 바꾸지 않으면서 특정 단계를 수행하는 내역을 바꾸는 패턴입니다. 상속 관계(Is-a)를 이용합니다. 장점은 중복 코드를 줄일 수 있지만, 단점으로 추상 메소드가 많아지면서 클래스 관리가 복잡해지고 또 확장구조가 이미 클래스를 설계하는 시점에서 고정되어 관계에 대한 유연성이 떨어집니다. Abstract public abstract class Abstract { public void superMetho.. Computer Science/Design Pattern 2021. 8. 3.
[Design Pattern] Strategy Pattern 전략패턴은 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴입니다. 기존의 코드 변경 없이 행위를 자유롭게 바꿀 수 있게 해주는 OCP를 준수한 디자인 패턴 방법을 말합니다. 전략패턴은 컴포지션 관계(has-a)를 가집니다. 컴포지션은 해당 인스턴스의 내부 구현이 바뀌더라도 영향을 받지 않습니다. 또 인터페이스를 활용하여 다른 인스턴스를 쉽게 변경할 수 있습니다. Context 스트래티지 패턴을 이용하는 역할을 수행합니다. 필요에 따라 동적으로 구체적인 전략을 바꿀 수 있도록 생성자 또는 Setter를 제공합니다. public class Context { private Strategy strategy; public void setTranslateStrategy(Strategy .. Computer Science/Design Pattern 2021. 8. 3.