DesignPattern(15)
-
SOLID 설계 원칙
단일 책임 원칙(SRP, Single Responsibility Principle)단일 책임 원칙은 클래스가 하나의 책임만을 가져야 하며, 클래스는 그 책임을 완전히 캡슐화해야 한다는 원칙입니다. 하나의 책임만을 가져야 한다는 의미는 클래스가 변경할 이유가 오직 하나여야 한다는 의미입니다. 하나의 클래스가 여러 책임을 가지게 되면 각 책임이 변경될 때마다 클래스가 변경되어야 하므로 클래스가 변경에 취약해집니다.즉, 단일 책임 원칙은 클래스가 여러개의 책임을 가진 상태에서 책임이 변경될 때마다 클래스가 수정의 영향을 받게 되기 때문에 하나의 책임만을 가져야 한다는 의미입니다.다음 예제는 단일 책임 원칙이 적용되지 않은 예제입니다. User 클래스는 사용자의 데이터를 저장하면서, 동시에 데이터베이스와 통신하..
2024.08.20 -
14. 컴퍼지트 패턴(Composite Pattern)
14.1 컴퍼지트 패턴 컴퍼지트 패턴은 부분-전체(Part-Whole)의 관계를 갖는 객체들을 정의할 때 유용하다. 예를 들어 Computer가 존재하면 그에 따른 Monitor, Body 등의 부품이 존재하고 Computer는 전체, Monitor, Body와 같은 부품들은 부분이 된다. 이러한 경우 부분 객체의 추가나 삭제 등이 있어도 전체 객체의 클래스 코드를 변경하지 않으면 컴퍼지트 패턴은 유용하다. 컴퍼지트 패턴은 전체-부분의 관게를 갖는 객체들 사이의 관계를 정의할 때 유용하다. 그리고 클라이언트는 전체와 부분을 구분하지 않고 동일한 인터페이스를 사용할 수 있다. 컴퍼지트 패턴의 컬레보레이션 Component : 구체적인 부분, 즉 Leaf 클래스와 전체에 해당하는 Composite 클래스에 ..
2021.06.14 -
13. 추상 팩토리 패턴(Abstract Factory Pattern)
13.1 추상 팩토리 패턴 추상 팩토리 패턴은 관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우에 유용하다. 밑에서 설명할 엘리베이터 예제에서 볼 수 있듯이 LG 부품을 위한 코드는 LG의 모터와 문을 이용할 것이다. 만약 현대 부품을 지원하도록 코드를 수정해야 한다면 모터와 문이 일관성 있게 LG에서 현대로 변경되어야 한다. 바로 이러한 경우에 부품별로 Factory를 정의하는 대신 관련 객체들을 일관성 있게 생성할 수 있도록 Factory 클래스를 정의하는 것이 효과적이다. 예를 들어 Motor 클래스를 위한 MotorFactory 클래스와 Door 클래스를 위한 DoorFactory 클래스를 정의하는 대신 LG 부품들을 위한 LGFactory 클래스와 현대 부품들을 위한 HyundaiF..
2021.06.10 -
12. 팩토리 메서드 패턴(Factory Method Pattern)
12.1 팩토리 메서드 패턴 팩토리 메서드 패턴은 객체의 생성 코드를 별도의 클래스/메서드로 분리함으로써 객체 생성의 변화에 대비하는데 유용하다. 아래에서 설명할 엘리베이터 스케줄링의 예에서 볼 수 있듯이 프로그램이 제공하는 기능은 상황에 따라 변경될 수 있다. 그리고 특정 기능의 구현은 개별 클래스를 통해 제공되는 것이 바람직한 설계이다. 따라서 기능의 변경이나 상황에 따른 기능의 선택은 바로 해당 객체를 생성하는 코드의 변경을 초래한다. 게다가 상황에 따라 적절한 객체를 생성하는 코드는 자주 중복될 수 있다. 이런 경우 객체 생성 방식의 변화는 해당되는 모든 코드 부분을 변경해야 하는 문제를 일으킨다. 팩토리 메서드 패턴의 개념 위 그림의 왼쪽처럼 여러 개의 클래스(클래스 A, 클래스 Z 등)에서 필..
2021.06.10 -
11. 템플릿 메서드 패턴(Template Method Pattern)
11.1 템플릿 메서드 패턴 템플릿 메서드 패턴은 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화할때 유용하다. 다른 관점에서 보면 동일한 기능을 상위 클래스에서 정의하면서 확장/변화가 필요한 부분만 서브 클래스에서 구현할 수 있도록 한다. 템플릿 메서드 패턴의 전체적인 알고리즘은 상위 클래스에서 구현하면서 다른 부분은 하위 클래스에서 구현할 수 있도록 하는 디자인 패턴이다. 전체적인 알고리즘 코드를 재사용하는데 유용하다. 템플릿 메서드 패턴의 컬레보레이션 AbstractClass : 템플릿 메서드를 정의하는 클래스. 하위 클래스에 공통 알고리즘을 정의하고 하위 클래스에서 구현될 기능을 primitive 메서드 또는 hook 메서드로 정의하는 클래스다. Concret..
2021.06.08 -
10. 데커레이터 패턴(Decorator Pattern)
10.1 데커레이터 패턴 데커레이터 패턴은 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에 각 추가 기능을 Decorator 클래스로 정의한 후 필요한 Decorator 객체를 조합함으로써 추가 기능의 조합을 설게하는 방식이다. 예를 들어 기본 도로 표시 기능에 차선 표시, 교통량 표시, 교차로 표시, 단속 카메라 표시의 4가지 추가 기능이 있을 때 추가 기능의 모든 조합은 15가지가 된다. 데커레이터 패턴을 사용하면 개별 추가 기능에 해당하는 Decorator 클래스 4개만 구현하고 개별 추가 기능을 객체의 형태로 조합함으로써 추가 기능의 조합을 구현할 수 있다. 데커레이터 패턴의 컬레보레이션 Component : 기본 기능을 뜻하는 ConcreteComponent와 추가 기능을 뜻하는 Deco..
2021.06.07