패턴은 목적(purpose), 범위(scope)로 분류할 수 있으며, 패턴은 생성, 구조, 행동 중의 한 가지 목적을 갖는다. 생성(creational) 패턴 - 객체의 생성 과정에 관여하는 패턴 구조(structural) 패턴 - 클래스나 객체의 합성에 관한 패턴 행동(behavioral) 패턴 - 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의하는 패턴 범위는 패턴을 클래스에 적용하는지 아니면 객체에 적용하는 지를 구분하는 것입니다 클래스 패턴 - 클래스와 서브 클래스 간의 관련성을 다루는 패턴, 관련성은 주로 상속, 컴파일 타임에 정적으로 결정됨 객체 패턴 - 객체 관련성을 다루는 패턴으로서, 런타임에 변경할 수 있으며 더 동적인 성격을 가집니다. 구분목적 구분 목적 생성 클라이언..
Abstract Factory - 추상 팩토리 구체적인 클래스를 지정하지 않고 관련성을 갖는 객체들의 집합을 생성하거나 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공하는 패턴 Adapter - 어댑터 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 함 Bridge - 브릿지 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴 추상적 개념에 해당하는 클래스와 실제 구현부를 분리함으로써 문제를 해결 Builder - 빌더 복합 객체의 생성 과정과 표현방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴 Chain of Responsi..
팩토리 메소드 패턴 객체의 생성을 서브클래스에 캡슐화한다. 어떤 객체를 생성할지를 런타임에 결정할 수 있다. 팩토리 메소드는 일반적으로 하나의 객체를 생성한다. [특징] 상속을 통해 서브클래스에서 팩토리 메소드(일반적으로 createXXX로 명명됨)를 오버라이딩해서 객체의 생성부를 구현 팩토리 메소드 클래스에서 생성할 타깃의 추상 클래스와 상속받은 클래스들 Pizza 추상 클래스를 상속해서 실제 피자 클래스(치즈피자, 페페로니피자 ...)를 만든다. public abstract class Pizza { String name; String dough; String sauce; void prepare() { System.out.println("Prepare " + name); System.out.print..
객체 지향 프로그래밍에서 의존관계 역전 원칙은 소프트웨어 모듈들을 분리하는 특정 형식을 지칭한다. 이 원칙을 따르면, 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다. 이 원칙은 다음과 같은 내용을 담고 있다. 첫째, 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다. 둘째, 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다. 이 원칙은 '상위와 하위 객체 모두가 동일한 추상화에 의존해야 한다'는 객체 지향적 설계의 대원칙을 제공한다. 의존 관계 역전 원칙은 상위 모듈은 하위 모듈의 구현 내용에 의존하면 안 된다는 원칙이다...
인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메서드에는 의존하지(depend on) 않아야 한다는 원칙이다. 인터페이스를 구현(implement)하거나, 클래스를 상속(extends)했는데, 사용하지 않거나 구현할 필요가 없는 메소드가 있다면 분리를 해줘야 한다는 원칙이다. 인터페이스 분리 원칙은 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용(구현)할 수 있게 한다. 이와 같은 작은 단위들을 역할 인터페이스라고도 부른다. 인터페이스 분리 원칙을 통해 시스템의 내부 의존성을 약화시켜 리팩토링, 수정, 재배포를 쉽게 할 수 있다. 인터페이스 (Interface) 클래스 사용의 권고사항을 제시하는 역할을 하는 특수형태의 클래스 아무런 구..
리스코프 치환 원칙(영어: Liskov substitution principle, LSP)은 바바라 리스코프가 자료 추상화와 계층 (Data abstraction and hierarchy)이라는 제목으로 기조연설을 한 1987년 컨퍼런스에서 처음 소개한 내용 자료형 {S}가 자료형 {T}의 하위형이라면, 프로그램에서 자료형 {T}의 객체는 프로그램의 속성을 변경하지 않고 자료형 {S}의 객체로 교체할 수 있다. public interface Animal { public void cry(); public void move(); public void MoveFast(); } public class Dog implements Animal { private String sould = "bowwow"; publi..
개방-폐쇄의 원칙, OCP, Open-Closed Principle 자신의 확장에는 열려있고, 주변의 변화에 대해서는 닫혀있어야 한다. 내부 책임(정보, 기능, 로직...)의 확장성은 확보하되, 다른 클래스 및 메소드 변경에 대해서는 영향을 받지 않도록 설계해야 한다. SOLID 제1 원칙인 단일 책임의 원칙(Single Responsibility Principle)에 맞게 설계된 클래스와 메소드라면 개방-폐쇄의 원칙(OCP)도 준수될 가능성이 높다. 그만큼 단일 책임의 원칙(SRP)가 중요함 개방-폐쇄의 원칙이 말로는 이해되기 쉽지만, 실제로 클래스 설계에 어떻게 반영을 해야 하는지를 이해하려면 아래 항목을 이해하고, 클래스 설계 시에 이를 준수하면 된다. 방향성 제어 컴포넌트간 의존성 방향은 단방향이..
SOLID 원칙 로버트 마틴이 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙 디자인패턴 및 스프링 프레임워크의 기본 설계(사상) 또한 SOLID 원칙을 기초로 함 단일 책임의 원칙, Single Responsibility Principle [ ˈsɪŋɡl rɪ|spɑːnsə│bɪləti ˈprɪnsəpl ] 개방-폐쇄 원칙, Open-Closed Principle 리스코프 치환 원칙, Liskov Substitution Principle [ |sʌbstɪ│tuːʃn ] 인터페이스 분리 원칙, Interface Segregation Principle [ ˌseɡrɪˈɡeɪʃn ] 의존관계 역전 원칙, Dependency Inversion Principle [ dɪˈpendənsi ɪn│vɜː..