Composite Parttern이란?컴파지트 패턴은 집합체와 집합체를 구성하는 단일체를 같은 개념으로 처리하는 구조적 디자인 패턴이다. 이 패턴을 사용하면 개별 객체와 객체 그룹을 동일하게 다룰 수 있어서객체를 트리 구조로 구성하여 부분-전체 계층을 표현할 수 있다. 왜 동일한 개념으로 처리하면 트리 구조로 구성할 수 있느냐?가 궁금하다면아래의 컴포지트 패턴의 UML 다이어그램을 보면 알 수 있다. Unit: Folder와 File의 공통의 type == compositeFile: 단일체Folder: 집합체 Folder안에 File도 들어가지만 또다른 sub Folder가 들어갈 수 있다.이때 여러번 Folder안에 Folder와 File을 넣는 과정에서우리는 맨 마지막 폴더가 tree 구조의..
Facade Parttern이란?복잡한 시스템이나 서브시스템을 단순하게 사용할 수 있는 인터페이스를 제공하는 구조적 디자인 패턴이다.Façade는 프랑스어로 정면 외벽을 의미한다. 즉, 복잡한 내부 구조를 벽에 숨겨놓고 다 알지 않아도단순하게 객체(인터페이스) 하나만으로도 시스템을 사용할 수 있게끔 도와주는 디자인 패턴이다. Facade Pattern을 쓰는 이유(==기존 개발 형태에 대한 문제점)?위키에도 올라와있는 예제(사용자가 퍼사드(컴퓨터)를 통해 컴퓨터 내부의 부품(CPU, HDD) 등을 접근한다는 내용의 추상적인 예제)를퍼사드 패턴을 적용하기 전, 기존 개발 코드로 작성하면 어떨까? 다음과 같을 것이다. 서브 시스템을 구성하는 클래스들public class CPU { public void..
Decorator Parttern이란?특정 클래스들에 객체들이 할 수 있는 기능들이 있을 때, 사용자가 원하는대로 동적으로 조합할 수 있게 해주는 구조적 디자인 패턴이다. 객체에 기능들을 장식처럼 계속 붙일 수 있는 패턴이다.Decorator Pattern을 쓰는 이유(==기존 개발 형태에 대한 문제점)?로그를 남기는 로그시스템을 다음과 같이 하나의 클래스에 구현했다고 생각해보자.public class Logger { public void log(String message) { // 기본 로그 기능 System.out.println("Logging: " + message); // 이메일 전송 sendEmail(message); // ..
Proxy Parttern이란?특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 구조 패턴이다. 다이어그램 설명Client:클라이언트 객체는 주체(Subject) 인터페이스를 통해 프록시 객체에 접근함.Subject:주체 인터페이스는 실제 객체와 프록시 객체가 구현해야 하는 인터페이스를 정의함. (클래스보다는 인터페이스)RealSubject:실제 주체는 주체 인터페이스를 구현하는 실제 객체.실제 작업을 수행하는 클래스.Proxy:프록시 클래스도 실제 객체처럼 주체 인터페이스를 구현함.실제 주체 객체에 대한 참조를 가지고 있으며, 필요에 따라 실제 객체를 생성하고 작업을 위임함.접근 제어, 지연 초기화, 로깅 등의 추가 기능을 제공함. 전체 동작 흐름클라이언트(Client)가 Proxy 객체를 생..
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..
Factory Parttern이란?Factory Pattern은 디자인 패턴의 종류 중 생성 디자인 패턴에 속한다. 객체 생성 로직을 추상화해서 하위 클래스에서 객체 생성에 대해 구체적인 내용을 결정하는 디자인 패턴이다.특징: 객체를 직접 생성하는 대신, 팩토리 클래스를 통해 객체를 생성함으로써 객체 생성 과정에서 발생할 수 있는 의존성을 줄이고, 코드의 유지보수성을 높일 수 있음.Factory Pattern을 쓰는 이유(==기존 개발 형태에 대한 문제점)?왜 쓰는지에 대한 관점을 Factory Pattern의 효과 및 장점이 아닌Factory Pattern을 쓰지 않았던 기존 개발 방식을 사용한다면 어떤 문제점(혹은 불편함)이 발생하는지 예시로 보겠다.1. 객체 생성 코드의 중복2. 코드 확장성 부족3..
Singleton Parttern이란?Singleton Pattern은 디자인 패턴의 종류(생성, 구조, 행동) 중 생성 디자인 패턴에 속한다. 하나의 클래스는 하나의 인스턴스만을 가지고, 그 생성된 1개의 인스턴스를 전역적으로 접근할 수 있는 객체를 만들어야할 때 사용함. 예를 들어 프로그램에서 딱 하나의 데이터 베이스 연결 객체만 필요할 때 사용한다. 예시)1. 데이터 베이스 연결 모듈2. 스프링 Bean3. 캐시4. 로깅5. 설정 클래스(Configuration Class)Singleton Pattern을 쓰는 이유(==기존 개발 형태에 대한 문제점)?기존에는 싱글톤 패턴 없이 클래스 A를 사용하기 위한 인스턴스가 필요할 때마다 매번 생성했다.그럼 A를 여러개 생성하면 자원도 많이 필요할 것이고 1..
SOLID 법칙이란?2000년대 초 로버트 마틴이 주창한 객체지향 5원칙을 두문법칙 기억법으로 정리해놓은 것입니다.a.k.a 경선식 영단어처럼요.. 그럼 하나씩 살펴봅시다.S: Single Responsibility Principle (SRP) 단일 책임 원칙한 클래스는 하나의 책임만 가져야 한다는 원칙 사실 저는 이 법칙이 가장 어려운 것 같습니다. 얼마나 책임을 구분해야하는 걸까?어디부터 어디까지가 단 하나의 책임으로 둘 수 있을까? 라고 말이죠.. SRP를 알아보기 위한 사례로 온라인 도서 관리 시스템로 생각해봅시다.도서를 관리하기 위해 우선 책 Book 클래스를 만듭니다. 해당 책에는 제목, 저자, 내용 등 이 존재할 거고요.저는 책 내용을 출력하는 기능, 책 내용을 저장하는 기능, 책 내용을 로..
서론객체 지향의 특징 4가지를 정리할 예정입니다.1. 캡슐화2. 추상화3. 상속4. 다형성 다형성이란다형성(Polymorphism) : 동일한 인터페이스나 상위 클래스(상속)에서 정의된 메서드를 여러 하위 클래스에서 각기 다르게 구현할 수 있게 하는 기능 다형성의 이점코드의 유연성: 동일한 인터페이스를 구현하거나 동일한 상위 클래스를 상속받는 객체들이 동일한 메시지(메서드 호출)에 대해 각기 다른 방식으로 반응할 수 있습니다.확장성: 새로운 클래스가 추가되더라도 기존 코드를 수정할 필요 없이 확장할 수 있습니다.재사용성: 상위 클래스나 인터페이스를 기반으로 다양한 하위 클래스를 생성하여 코드의 재사용성을 높입니다.유지 보수성: 코드의 유지 보수가 용이해지며, 버그를 줄이고 수정 시 영향을 최소화할 수..
서론객체 지향의 특징 4가지를 정리할 예정입니다.1. 캡슐화2. 추상화3. 상속4. 다형성 상속이란상속 : 하나의 클래스가 다른 클래스의 속성과 메서드를 물려받아 사용하는 객체 지향 프로그래밍(OOP)의 중요한 개념 중 하나상속에 관련된 개념은 추상화, 상위 클래스, 하위 클래스 입니다. 추상화: 구체적인 구현 세부 사항을 감추고, 객체의 공통적인 속성과 기능을 추출하여 정의하는 것상위 클래스(Super Class): 다른 클래스가 상속받는 클래스. 부모 클래스 또는 기본 클래스하위 클래스(Sub Class): 상위 클래스를 상속받는 클래스. 자식 클래스 또는 파생 클래스 하위 클래스가 상속을 통해 상위 클래스의 속성과 메서드를 물려받아(공통기능) 재사용하고, 하위 클래스는 공통된 특성과 기능을 물려..