CS/디자인패턴

CS/디자인패턴

[Design Pattern] Composite Pattern(컴포지트 패턴)

Composite Parttern이란?컴파지트 패턴은 집합체와 집합체를 구성하는 단일체를 같은 개념으로 처리하는 구조적 디자인 패턴이다. 이 패턴을 사용하면 개별 객체와 객체 그룹을 동일하게 다룰 수 있어서객체를 트리 구조로 구성하여 부분-전체 계층을 표현할 수 있다. 왜 동일한 개념으로 처리하면 트리 구조로 구성할 수 있느냐?가 궁금하다면아래의 컴포지트 패턴의 UML 다이어그램을 보면 알 수 있다.      Unit: Folder와 File의 공통의 type == compositeFile: 단일체Folder: 집합체 Folder안에 File도 들어가지만 또다른 sub Folder가 들어갈 수 있다.이때 여러번 Folder안에 Folder와 File을 넣는 과정에서우리는 맨 마지막 폴더가 tree 구조의..

CS/디자인패턴

[Design Pattern] Facade Pattern(퍼사드 패턴)

Facade Parttern이란?복잡한 시스템이나 서브시스템을 단순하게 사용할 수 있는 인터페이스를 제공하는 구조적 디자인 패턴이다.Façade는 프랑스어로 정면 외벽을 의미한다. 즉, 복잡한 내부 구조를 벽에 숨겨놓고 다 알지 않아도단순하게 객체(인터페이스) 하나만으로도 시스템을 사용할 수 있게끔 도와주는 디자인 패턴이다. Facade Pattern을 쓰는 이유(==기존 개발 형태에 대한 문제점)?위키에도 올라와있는 예제(사용자가 퍼사드(컴퓨터)를 통해 컴퓨터 내부의 부품(CPU, HDD) 등을 접근한다는 내용의 추상적인 예제)를퍼사드 패턴을 적용하기 전, 기존 개발 코드로 작성하면 어떨까? 다음과 같을 것이다. 서브 시스템을 구성하는 클래스들public class CPU { public void..

CS/디자인패턴

[Design Pattern] Decorator Pattern(데코레이터 패턴)

Decorator  Parttern이란?특정 클래스들에 객체들이 할 수 있는 기능들이 있을 때, 사용자가 원하는대로 동적으로 조합할 수 있게 해주는 구조적 디자인 패턴이다. 객체에 기능들을 장식처럼 계속 붙일 수 있는 패턴이다.Decorator  Pattern을 쓰는 이유(==기존 개발 형태에 대한 문제점)?로그를 남기는 로그시스템을 다음과 같이 하나의 클래스에 구현했다고 생각해보자.public class Logger { public void log(String message) { // 기본 로그 기능 System.out.println("Logging: " + message); // 이메일 전송 sendEmail(message); // ..

CS/디자인패턴

[Design Pattern] Proxy Pattern(프록시 패턴)

Proxy Parttern이란?특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 구조 패턴이다. 다이어그램 설명Client:클라이언트 객체는 주체(Subject) 인터페이스를 통해 프록시 객체에 접근함.Subject:주체 인터페이스는 실제 객체와 프록시 객체가 구현해야 하는 인터페이스를 정의함. (클래스보다는 인터페이스)RealSubject:실제 주체는 주체 인터페이스를 구현하는 실제 객체.실제 작업을 수행하는 클래스.Proxy:프록시 클래스도 실제 객체처럼 주체 인터페이스를 구현함.실제 주체 객체에 대한 참조를 가지고 있으며, 필요에 따라 실제 객체를 생성하고 작업을 위임함.접근 제어, 지연 초기화, 로깅 등의 추가 기능을 제공함. 전체 동작 흐름클라이언트(Client)가 Proxy 객체를 생..

CS/디자인패턴

[Design Pattern] Strategy Pattern(전략 패턴)

Strategy  Parttern이란?객체의 행위를 캡슐화하여 동적으로 행위를 변경할 수 있도록 하는 디자인 패턴이다.디자인 패턴 중 행위 패턴에 속한다. Strategy  Pattern을 쓰는 이유(==기존 개발 형태에 대한 문제점)?예를 들어 "결제"라는 행위에 대해 기존 개발 방식처럼 구현해보자.public class ShoppingCart { private List items; private String paymentMethod; // "CREDIT_CARD" or "CASH" public ShoppingCart(String paymentMethod) { this.items = new ArrayList(); this.paymentMethod = paymen..

CS/디자인패턴

[Design Pattern] Factory Pattern(팩토리 패턴)

Factory Parttern이란?Factory Pattern은 디자인 패턴의 종류 중 생성 디자인 패턴에 속한다. 객체 생성 로직을 추상화해서 하위 클래스에서 객체 생성에 대해 구체적인 내용을 결정하는 디자인 패턴이다.특징: 객체를 직접 생성하는 대신, 팩토리 클래스를 통해 객체를 생성함으로써 객체 생성 과정에서 발생할 수 있는 의존성을 줄이고, 코드의 유지보수성을 높일 수 있음.Factory Pattern을 쓰는 이유(==기존 개발 형태에 대한 문제점)?왜 쓰는지에 대한 관점을 Factory Pattern의 효과 및 장점이 아닌Factory Pattern을 쓰지 않았던 기존 개발 방식을 사용한다면 어떤 문제점(혹은 불편함)이 발생하는지 예시로 보겠다.1. 객체 생성 코드의 중복2. 코드 확장성 부족3..

CS/디자인패턴

[Design Pattern] Singleton Pattern(싱글톤 패턴)

Singleton Parttern이란?Singleton Pattern은 디자인 패턴의 종류(생성, 구조, 행동) 중 생성 디자인 패턴에 속한다. 하나의 클래스는 하나의 인스턴스만을 가지고, 그 생성된 1개의 인스턴스를 전역적으로 접근할 수 있는 객체를 만들어야할 때 사용함. 예를 들어 프로그램에서 딱 하나의 데이터 베이스 연결 객체만 필요할 때 사용한다. 예시)1. 데이터 베이스 연결 모듈2. 스프링 Bean3. 캐시4. 로깅5. 설정 클래스(Configuration Class)Singleton Pattern을 쓰는 이유(==기존 개발 형태에 대한 문제점)?기존에는 싱글톤 패턴 없이 클래스 A를 사용하기 위한 인스턴스가 필요할 때마다 매번 생성했다.그럼 A를 여러개 생성하면 자원도 많이 필요할 것이고 1..

CS/디자인패턴

[Design Pattern] Builder Pattern(빌더 패턴)

Builder Parttern이란?Builder Pattern은 디자인 패턴의 종류(생성, 구조, 행동) 중 생성 디자인 패턴에 속한다.객체를 만드는 방법이 여러 가지 일때, 즉 옵션이 많은 객체를 만들어야할 때 사용함 Builder Pattern을 쓰는 이유 (== 기존 개발 형태에 대한 문제점)?만일 집(아파트가 아닌 독립 주택)이라는 클래스가 있다고 하자. 해당 집에는 지붕, 방, 창문, 화장실, 마당, 발코니 등 여러 요소가 있고 할때 이를 클래스로 구현하면 다음과 같다. public class House { private int rooms; private int toilets; private int windows; private int floors; private boolean hasB..

CS/디자인패턴

[Design Pattern] Observer pattern(옵저버 패턴)

Observer Pattern(옵저버 패턴)이란?Observer Pattern은 디자인 패턴(생성, 구조, 행동) 중 행동 디자인 패턴에 속한다.주체가 어떤 객체(subject)의 상태 변화를 관찰 하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴이다. 이런 변화를 알려주는 과정에서 흔히 객체가 발행자(publish) 옵저버가 구독자(subscribe)로도 알려져 있으며 이는 객체와 옵저버가 1:N관계를 가지며 분산 이벤트 시스템을 구현하는 데 이용하기도 한다. 물론 이렇게만 읽으면 크게 와닿는게 없다..! 그래도 저기서 bold처리한 객체와 옵저버가  존재하고 객체(subject)의 상태변화가 있을 때마다 옵저버가 알게되어야 하는 상황이라면 ..

CS/디자인패턴

[Design Pattern] 디자인 패턴이란?

디자인 패턴이란 무엇인가?소프트웨어 개발에서의 디자인 패턴은 소프트웨어 개발의 일반적인 문제에 대한 해결책으로, 모든 프로그래밍 언어 및 업계의 개발자가 자주 직면하는 문제에 대한 해결책이다. 디자인 패턴은 시간이 지남에 따라 일종의 표준이 된 모범 사례로 소프트 웨어 업계에서 널리 알려져있으며, 고유한 이름을 갖고있는 것들이 존재한다. (빌더, 파사드 등등) 즉, 디자인 패턴은 아키텍처를 사용할때- 코드를 더 깔끔하고  확장 가능하게- 유지 관리하기 쉬운 방식으로 구성하도록도움이 된다. 다음에 팀을 옮기거나 회사에 입사할 때어떤 패턴이 사용되고 있는지 파악하고 코드베이스를 더 빨리 이해할 수 있고,새로운 프로젝트를 시작하는 경우 더욱 더 견고하게 프로젝트를 구축할 수 있다. 디자인 패턴 종류생성(Cre..

three von
'CS/디자인패턴' 카테고리의 글 목록