본문 바로가기

디자인패턴26

[디자인패턴] 구조 패턴(1) : 어댑터(Adapter) 목차 어댑터(Adapter) 어댑터 디자인 패턴(Adapter Design Pattern)은 두 개의 호환되지 않는 인터페이스 사이에 다리를 놓는 디자인 패턴이다. 이 패턴은 한 클래스의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환한다. 클라이언트에서는 변환된 인터페이스를 사용하여 기존 클래스를 사용할 수 있게 된다. 이러한 방식으로 어댑터는 기존 코드를 변경하지 않고도 새로운 인터페이스와 기존 인터페이스 간의 호환성 문제를 해결한다. 패턴명인 '어댑터'는 일상 생활에서 사용하는 전기 어댑터에서 유래했다. 전기 어댑터는 한 국가의 전기 플러그가 다른 국가의 콘센트와 맞지 않을 때, 두 전기 시스템 간의 호환성을 제공한다. 마찬가지로, 어댑터 디자인 패턴도 서로 호환되지 않는 인터페이스 간의 .. 2024. 3. 24.
[디자인패턴] 생성 패턴(6) : 싱글톤(Singleton) 목차 싱글톤(Singleton) 싱글톤 디자인 패턴은 클래스의 인스턴스가 프로그램 전체에서 단 하나만 생성되어 사용되도록 하는 디자인 패턴이다. 이 패턴의 주된 목적은 한 클래스에 대한 단일 인스턴스만을 생성하고, 그 인스턴스에 대한 전역 접근점을 제공하는 것이다. 패턴명인 "싱글톤(Singleton)"은 '하나의 구성 요소' 또는 '단일체'라는 의미의 영어 단어에서 유래했다. 이는 클래스의 인스턴스가 단 하나만 존재해야 한다는 패턴의 특징을 직관적으로 설명해 준다. 싱글톤 패턴 미적용 예시 싱글톤 패턴을 적용하지 않았을 때의 문제점을 보여주는 C# 코드는 다음과 같다. csharpCopy code class DatabaseConnector { public DatabaseConnector() { // 데.. 2024. 3. 24.
[디자인패턴] 생성 패턴(5) : 프로토타입(Prototype) 목차 프로토타입(Prototype) 프로토타입 디자인 패턴은 생성 디자인 패턴의 하나로, 객체를 생성하는 비용이 높을 때 원본 객체를 복제하는 방식으로 새 객체를 생성하는 기법이다. 이 패턴은 '프로토타입'이라는 용어에서 유래했다. 프로토타입(Prototype)이란 원형이나 본보기를 의미하며, 이 패턴에서는 객체의 원형(프로토타입)을 복제(clone)하여 새 객체를 생성한다. 패턴 미적용 예시 코드 C#에서 프로토타입 패턴을 적용하지 않은 경우, 객체를 생성할 때마다 새로운 인스턴스를 처음부터 생성해야 한다. 복잡한 객체의 경우 생성 과정이 비효율적이 될 수 있다. using System; class ComplexObject { public int Property1 { get; set; } public .. 2024. 3. 24.
[디자인패턴] 생성 패턴(4) : 빌더(Builder) 목차 빌더(Builder) 빌더(Builder) 디자인 패턴은 복잡한 객체의 생성 과정과 그 표현 방법을 분리해, 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있도록 하는 생성 디자인 패턴이다. 이 패턴은 주로 객체의 생성이 복잡하거나, 객체의 구성 요소가 많고, 구성이 단계적으로 이루어져야 할 때 사용한다. 패턴명의 어원은 실제 건축에서의 빌더와 유사하다. 건축에서 건물을 짓는 과정은 매우 복잡하며, 다양한 단계와 부품이 필요하다. 이 과정을 프로그래밍에 적용하여, 복잡한 객체를 단계별로 조립해 나가는 것을 '빌더 패턴'이라고 부른다. 패턴을 미적용한 예시 코드 빌더 패턴을 적용하지 않고 복잡한 객체를 생성하는 경우, 객체의 생성자가 과도하게 복잡해지거나, 필요한 데이터를 모두 생성자에 넘겨줘.. 2024. 3. 24.
[디자인패턴] 생성 패턴(3) : 팩토리 메서드(Factory Method) 목차 팩토리 메서드(Factory Method) 팩토리 메서드 패턴은 생성 디자인 패턴에 속한다. 이 패턴의 목적은 객체 생성 처리를 서브클래스에 위임하여 부모 클래스에서는 어떤 클래스의 인스턴스를 생성할지에 대한 결정을 하지 않도록 하는 것이다. 즉, 객체 생성 코드를 전체 프로그램 코드와 분리하여 유연성을 높이고, 코드의 관리를 용이하게 한다. 패턴의 이름은 "공장(Factory)"이라는 단어에서 유래했다. 실제 공장에서 제품을 만들듯, 팩토리 메서드 패턴에서는 객체를 생성하는 '공장' 역할을 하는 메서드를 제공한다. 이 패턴을 사용함으로써, 객체 생성 과정을 서브클래스에게 맡기고, 클라이언트 코드는 추상화된 인터페이스를 통해 원하는 객체를 얻게 된다. 패턴 미적용 예시 코드 // 패턴 미적용 상황:.. 2024. 3. 24.
[디자인패턴] 생성 패턴(2) : 추상 팩토리(Abstract Factory) 목차 추상 팩토리(Abstract Factory) Abstract Factory 패턴은 서로 관련있거나 의존적인 객체들의 그룹을 생성하기 위한 인터페이스를 제공하지만, 구체적으로 어떤 클래스의 인스턴스를 생성할지는 서브클래스가 결정하게 하는 생성 디자인 패턴이다. 즉, 클라이언트는 생성할 객체의 정확한 클래스를 명시하지 않고도 객체를 생성할 수 있다. 이 패턴은 객체 생성에 관련된 로직을 프로그램의 나머지 부분으로부터 분리하며, 코드의 유연성과 재사용성을 높인다. Abstract Factory 패턴은 생성(Creational) 디자인 패턴에 속한다. 이 패턴은 객체의 생성 과정을 추상화함으로써, 클라이언트가 특정 클래스의 인스턴스에 직접적으로 의존하지 않도록 하여, 시스템의 결합도를 낮추고, 확장성과 유.. 2024. 3. 24.
[디자인패턴] 생성 패턴(1) : 심플 팩토리(Simple Factory) 목차 심플 팩토리(Simple Factory) Simple Factory 패턴은 객체의 생성을 전담하는 클래스를 사용하여 객체 생성 과정의 복잡성을 감추고, 코드의 유연성과 재사용성을 높이는 디자인 패턴이다. 이 패턴은 객체 생성에 필요한 로직을 캡슐화하여, 클라이언트 코드가 구체적인 클래스 타입에 직접 의존하지 않도록 한다. 즉, 클라이언트는 생성하고자 하는 객체의 정확한 타입을 몰라도, 팩토리를 통해 필요한 객체를 얻을 수 있다. Simple Factory 패턴은 생성(Creational) 디자인 패턴에 속한다. 이유는 이 패턴이 객체 생성 과정에 초점을 맞추며, 인스턴스화 로직을 클라이언트로부터 분리하여 객체 생성의 책임을 담당하는 클래스(Factory)에 위임하기 때문이다. 따라서, 코드의 유지보.. 2024. 3. 24.
[디자인 패턴] 디자인 패턴의 역사와 종류 목차  디자인 패턴디자인 패턴은 소프트웨어 설계에서 반복적으로 발생하는 문제를 해결하기 위한 해결책을 체계적으로 정리한 것이다. 이러한 패턴들은 개발 과정에서 발생하는 다양한 문제에 대해 재사용 가능한 솔루션을 제공한다. 디자인 패턴의 역사와 발전 과정, 그리고 주요 패턴들에 대해 알아보자. 역사1987년: 컴퓨터 과학자 워드 커닝햄과 켄트 벡이 Smalltalk 언어를 사용하여 디자인 패턴에 대한 아이디어를 실험하기 시작했다. 이들의 작업은 객체 지향 프로그래밍 커뮤니티에 큰 영향을 미쳤다.1994년: 에릭 감마, 리처드 헬름, 랄프 존슨, 존 블리시디스 네 명의 저자가 "Design Patterns: Elements of Reusable Object-Oriented Software"라는 책을 출간했다.. 2024. 3. 24.