반응형 Design Pattern12 프로토타입(Prototype) 디자인 패턴 객체 생성을 복제로 전환하는 설계 전략디자인 패턴에서 생성 패턴(Creational Pattern)은 단순히 객체를 “어떻게 만드는가”의 문제가 아니다.이는 객체 생성 비용, 결합도, 확장성을 어떻게 관리할 것인가에 대한 설계 전략이다. 그중 프로토타입(Prototype) 패턴은 생성자나 팩토리를 통한 객체 생성이 오히려 부담이 되는 상황에서,이미 생성된 객체를 복제함으로써 문제를 해결한다. 이 글에서는 프로토타입 패턴을 단순한 clone() 기법이 아닌,객체 생성 책임을 재배치하는 아키텍처 관점의 패턴으로 설명한다. 객체 생성은 왜 문제가 되는가일반적으로 객체 생성은 단순한 new 호출로 끝나는 것처럼 보인다.그러나 실무에서는 다음과 같은 상황이 자주 발생한다.객체 초기화 과정이 복잡한 경우외부 설정 .. 2026. 1. 20. 디자인 패턴 - Factory Pattern Factory Pattern (조금 더 구체적인 용어로는 Factory Method Pattern) ㆍ팩토리 패턴은 생성 패턴(Creational Pattern) 중 하나. 생성 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴. 생성 패턴에 속하는 패턴들은 객체를 생성, 합성하는 방법이나 객체의 표현 방법을 시스템과 분리해줌. 생성 패턴은 시스템이 상속(inheritance)보다 복합(composite) 방법을 사용하는 방향으로 진화되어 가면서 더 중요해지고 있음. 생성 패턴에서는 중요한 두가지 이슈가 있음. 1. 생성 패턴은 시스템이 어떤 Concrete Class를 사용하는지에 대한 정보를 캡슐화 함. 2. 생성 패턴은 이들 클래스의 인스턴스들이 어떻게 만들고 어떻게 결합하는지에 대한 부분을 완전히 .. 2022. 6. 25. 디자인 패턴 - Compound Pattern Compound Pattern이란? 컴파운드 패턴은 이름 그대로 여러 디자인 패턴이 혼합된 디자인 패턴을 말함. 일련의 패턴을 함께 사용하여 다양한 디자인 문제를 해결함. 반복적으로 생길수 있는 일반적인 문제를 해결하기 위한 용도로 사용됨. 패턴으로 이루어진 패턴. / 하지만 단순히 여러 패턴이 사용되었다고 해서 컴파운드 패턴인 것은 아님. 앞서 말했듯 여러 패턴이 사용되는 동시에 일반적인 문제를 해결하는데 반복적으로 사용될 수 있어야 함. Compound Pattern의 대표적인 예시는 그 유명한 MVC Pattern. MVC Pattern이란? MVC(Model-View-Controller) Pattern은 하나의 application, project를 구성할 때, 그 구성요소를 역할에 따라 모델-뷰.. 2022. 6. 1. 디자인 패턴 - Singleton Pattern Singleton Pattern : Program이 시작될 때 어떤 클래스가 최초 한번만 메모리를 static하게 할당하고 그 메모리에 instance를 만들어 사용하는 패턴. / 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나고 최초 생성 이후에 호출된 생성자는 이전에 생성했던 객체를 반환함. -> 자바에서는 생성자를 private으로 선언해서 생성 불가하게 하고 getInstance()로 받아서 쓰기도 함. / registry 같은 설정 파일의 경우 객체가 여러개 생성되면 설정 값이 변경될 위험이 생길 수 있다. Instance가 하나만 생성되는 특징을 가진 싱글턴 패턴을 이용하면, 하나의 instance를 메모리에 등록해서 여러 thread가 동시에 해당 instance를 공유하여 사용.. 2022. 5. 22. 디자인 패턴 - Proxy Pattern 프록시 패턴 : 프록시 객체를 통해 기본 객체에 접근하는 패턴. / Proxy는 번역하면 대리자, 대변인의 의미를 갖는다. 즉 프록시는 어떤 역할을 대신 수행하는 존재임. / (비서같은 존재 -> 사장한테 질문을 바로 하기보다는 비서한테 먼저 물어보는 개념) / 이렇게 어떤 객체를 사용하고자 할 때, 객체를 직접적으로 참조하는 것이 아니라, 해당 객체를 대행(proxy)하는 객체를 통해 대상 객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고 또한 실제 객체의 기능이 반드시 필요한 시점까지 객체의 생성을 미룰 수 있음. 예를 들어, 용량이 큰 이미지와 글이 같이 있는 문서를 모니터 화면에 띄울 때 이미지 파일은 용량이 크고 텍스트는 용량이 작아.. 2022. 5. 17. 디자인 패턴 - State Pattern State Pattern : 스테이트 패턴은 객체가 특정 상태에 따라 행위를 달리하는 상황에서, 자신이 직접 상태를 체크하여 상태에 따라 행위를 호출하지 않고, 상태를 객체화하여 상태가 행동을 할 수 있도록 위임하는 패턴. / 객체의 특정 상태를 클래스로 선언하고, 클래스에서는 해당 상태에서 할 수 있는 행위들을 메서드로 정의함. / 이러한 각 상태 클래스들을 인터페이스로 캡슐화하여, 클라이언트에서 인터페이스를 호출하는 방식. / 객체의 내부 상태에 따라 스스로 행동을 변경할 수 있게 허가하는 패턴으로, 이렇게 하면 객체는 마치 자신의 클래스를 바꾸는 것처럼 보임 State 패턴으로 refactoring하는 주된 목적은 상태 전이를 위한 조건 로직(if문들)이 지나치게 복잡한 경우 이를 해소하는 것. 상.. 2022. 4. 27. 디자인 패턴 - Composite Pattern 컴포지트 패턴 = 여러개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별없이 다루게 해주는 패턴. (클라이언트가 복합 객체(group of object)나 단일 객체를 동일하게 취급하는 것을 목적으로 함) / 컴포지트의 의도는 계층적으로 구성된 정보를 트리 구조로 작성하여, 전체-부분(whole-part) 관계 표현 / 전체와 부분의 관계를(Directory와 File같은) 갖는 객체들 사이의 관계를 정의할 때 유용함. / 클라이언트는 전체와 부분을 구분하지 않고 동일한 인터페이스 사용 가능. 컴포지트 패턴은 언제 사용하는가 - 복합 객체와 단일 객체의 처리 방법이 다르지 않을 경우, 전체-부분 관계로 정의 가능. 이 관계를 효율적으로 정의할때 유용함. 역할이 수행하는 작업 - Compon.. 2022. 4. 16. 디자인 패턴 - Template Method pattern Template Method pattern : 객체가 실행해야 하는 알고리즘 기본 골격을 추상(부모)클래스에 구현해 놓은 후 서브클래스에서 메소드를 override하여 객체가 수행해야 할 행위의 다양성을 표현하는 방법. ==> 객체지향 프로그래밍 시에 생활화해야 되는 코딩 스타일 / 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴. / 상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법. 변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장할 기능은 서브클래스에서 만들도록 함. - 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화할때 유용함. - 동.. 2022. 4. 12. 디자인 패턴 - Iterator pattern Iterator pattern은 collection 객체의 element들을 traverse하기 위한 기능을 collection 객체와 독립적으로 구현하는 방법. (=객체 지향 프로그래밍에서 iterator를 사용하여 container를 가로지르며 요소들에 접근하는 패턴.) 컬렉션 객체 - 배열, ArrayList, Stack, LinkedList, HashMap등 라이브러리에 있는 Iterator 객체를 구현하는 예제 특징 : Iterator 패턴은 container로부터 알고리즘을 분리시키며, 일부의 경우 알고리즘들은 필수적으로 container에 특화되어 있기 때문에 분리가 불가능하다함. / 유연하고 재사용 가능한 객체지향 소프트웨어를 설계하기 위해 반복되는 디자인 문제를 해결하는 방법. Itera.. 2022. 4. 12. 디자인 패턴 - Facade pattern Facade pattern : facade(건물의 정면) / 특정 서브 시스템에 소속된 여러개의 객체를 액세스하기 위한 통합된 접근 경로를 제공하는 방법. adapter pattern과 facade 이 두개의 패턴은 이질적인 시스템을 연결하는 효과를 제공함. Facade pattern은 클래스 라이브러리 같은 어떤 소프트웨어의 다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체. / facade는 소프트웨어 라이브러리를 쉽게 사용할 수 있게 해줌(공통적인 작업에 대해 간편한 메소드들을 제공해줌). / facade는 라이브러리 바깥쪽의 코드가 라이브러리의 안쪽 코드에 의존하는 일을 감소시켜줌. 대부분의 바깥쪽의 코드가 facade를 이용하기 때문에 시스템을 개발하는데 있어 유연성이 향상됨. .. 2022. 4. 12. 디자인 패턴 - adapter pattern 어댑터 패턴 : 특정 객체의 기능에 어댑터를 wrapping 함으로써 그 객체의 기능을 변경시키는 방법 한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 인터페이스로 변환. 어댑터를 사용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. -> 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할 수 있다. + 클라이언트와 구현된 인터페이스를 분리시킬수 있으며, 향후 인터페이스가 바뀌더라도 그 변경 내역은 어댑터에 캡슐화 되기 때문에 클라이언트는 바뀔 필요가 없어짐. 어댑터는 5핀 usb 끝에 달린 c-type 어댑터나 외국 전기 콘센트에 끼우기 위한 220v 플러그에 달린 110v 어댑터 느낌. 기존 시스템 > ) 업체에서 제공한 클래스 └> 기존 시스템 .. 2022. 4. 10. 디자인 패턴 - 커멘드 패턴 커멘드 패턴은 간단하게 말하면 호출 캡슐화 - 함수 호출을(명령, 메시지) 캡슐화 한 후에 대리자(invoker)를 통해서 간접적으로 명령을 실행시키는 방법. 재사용성이 높은 클래스를 설계하는 패턴. -이벤트가 발생했을때 실행될 기능이 다양하면서도 변경이 필요할 수 있을때 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할때 유용함. (갈아끼우기쉬움 if문 없애기) -실행할 함수의 캡슐화로 Invoker 클래스와 Receiver 클래스 사이의 의존성을 제거함. => 실행될 기능의 변경에도 Invoker 클래스의 수정 없이 그대로 사용 가능. command 객체의 본질 : [receiver reference, method reference, argument reference]의 조합. Java의 r.. 2022. 4. 8. 이전 1 다음 반응형