CheerUp_Cheers

디자인 패턴 본문

CS

디자인 패턴

meorimori 2020. 2. 18. 13:17
  • 디자인 패턴이란?
  • 디자인 패턴 종류
  • 싱글턴 패턴이란?
  • 팩토리 메서드 패턴이란(Kit Patten)?
  • 추상 팩토리 패턴이란?
  • 템플릿 메소드 패턴이란?

디자인 패턴이란?

#정의

소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 경우,

재사용할 수 있는 훌륭한 해결책.

-> 잘 만들어져 있어서 다시 만들 필요 (X)

 

#이점

공통되는 설계문제를 해결할 공통점(=패턴)

팀원 사이의 의사소통을 원활하게 함.

 

#구조

- 콘텍스트 : 문제가 발생하는 상황(= 패턴이 적용될 수 있는 상황을 나타냄)

경우에 따라서는 패턴이 유용하지 못한 상황을 나타내기도 함.

- 문제 : 패턴이 적용 되어 해결될 필요가 있는 이슈.

제약과 영향력도 문제해결을 위해 고려.

- 해결 : 문제를 해결 하도록 설계를 구성하는 요소들과 그 요소들과의 관계, 책임, 협력을 기술.

다양한 상황에 적용할 수 있는 템플릿.


  • 디자인 패턴 종류

GOF 디자인 패턴 : 23가지의 디자인 패턴

GOF 디자인 패턴

#생성패턴

객체의 생성과 조합을 캡슐화하여 특정 객체의 생성과 변경에 있어도 프로그램 구조에 영향이 없도록 유연성 제공.

 

- 추상 팩토리 : 구체적인 클래스에 의존하지 않고, 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴

- 팩토리 메서드 : 생성할 구상 클래스를 서브클래스에서 결정.

- 싱글턴 : 전역 변수를 사용하지 않고, 객체 하나만 생성(Private 이용)

생성된 객체를 어디에서든 참조할 수 있는 패턴.

 

#구조 패턴

- 컴퍼지트 : 클라이언트에서 객체 컬렉션과 개발 객체를 똑같이 다룰 수 있게 함.

- 데커 레이터 : 객체를 감싸서 새로운 행동을 제공.

 

#행위패턴

- 옵서버 : 상태가 변경되면 다른 객체들과 연동하여 연락을 돌릴 수 있게 함.

- 스테이트 : 객체의 상태에 따라 동적으로 객체의 행위 내용을 변경해주는 패턴.

- 스트래티지 : 교환 가능한 행동을 캡슐화하고 위임을 통해 어떤 행동을 할지 결정.

- 템플릿 메서드 : 알고리즘 개별 단계를 구현할 방법을 서브클래스에서 결정.

- 커맨드 : 실행될 기능을 캡슐화하여 재사용성 높은 클래스 설계.


  • 싱글턴 패턴이란?

#정의

전역 변수를 사용하지 않고 객체를 하나만 생성, 생성된 개체는 어디서든지 참조.

인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고, 기존의 인스턴스를 활용하는 것.

자신의 인스턴스를 가리키는 참조체가 유일, Getter메서드 하나로만 생성/접근 가능.

싱글턴 패턴의 클래스 다이어그램

#수행작업과 책임

- 하나의 인스턴스만을 생성하는 책임

- getInstance 메서드를 통한 모든클라이언트에 동일한 인스턴스 반환 작업

 

#장점

- 고정된 메모리 영역을 가짐( 한번의 new로 인스턴스 생성)

- 싱글톤으로 만들어진 클래스는 전역 인스턴스라 데이터 공유가 쉬움.

- 두 번째 이용시부터는 객체 로딩 시간이 현저하게 줄어 성능이 좋아짐.

 

#단점

- 싱글턴 인스턴스가 너무 많은 일을 하거나 많은 데이터 공유 (결합도↑ = 개방-폐쇄원칙 위배) 

  -> 수정과 테스트가 어려워짐.

- 다중 스레드 환경에서 같은 클래스를 접근시 인스턴스가 1개 초과하여 생성이 가능

   1) 스레드1이 생성되기 전, null인 것을 확인하고 생성하려고 함.

   2) 스레드2도 null인것을 확인하고 생성을 돌입.

   3) 스레드 1,2 둘다 인스턴스를 생성하게 되어 경합현상(Race Condition) 발생.

 

#해결

- 정적 변수에 인스턴스를 만들어 초기화.

- 인스턴스를 만드는 메소드를 동기화.(getInstance)

 

#사용되는 곳

 - 데이터 베이스 커넥션 풀

 - 스레드 풀, 캐시, 로그 기록 객체.


  • 팩토리 메서드 패턴이란?

#정의

- 객체 생성 처리를 서브 클래스로 분리해 처리하도록 캡슐화 하는 패턴

  ->  ( 객체의 생성을 전담/분리 ) 하여 객체 생성의 변화에 대비에 유용.

- 특정 기능의 구현은 개별 클래스를 통해 제공되는 것이 바람직한 설계.

  -> 객체 생성 방식의 변화는 해당되는 모든 코드를 변경해야하는 문제가 발생하기 떄문.

 

#장점

- 어떤 기능이 추가될지 알 수 없는 경우 유용.

- 코드의 중복을 제거 가능. 수정 용이

 

#단점

- 생성할 객체의 종류가 달라질 때마다, 하의클래스를 정의야한다.

 

 


  • 추상 팩토리 패턴이란(= Kit Patten)?

#정의

많은 수와 연관된 클래스를 특정그룹으로 묶어 한번에 교체 할 수 있도록 만든 디자인 패턴.

서로 다른 객체들을 하나의 팩토리에서 생성과 관리.

제품이 생산되는 방법은 서브클래스에서 정의.

 

#장점

구체적인 클래스가 사용자에게 분리되어 코드에 나타나지 않음.

제품군을 쉽게 대체할 수 있음.

제품사이의 일관성 상승.

 


  • 템플릿 메소드 패턴이란?

#정의

한꺼번에 구체클래스(상속받는)를 구현하지 않고, 추상클래스의 템플릿 메소드(추상메소드)를 구체클래스가 상속.

자신이 필요한 메소드를 작성하는 방식.

상위 클래스, 즉 추상 클래스가 일종의 견본역할.

추상 클래스(템플릿), 구체클래스(구체적 구현)

 

#구현

1) 공통적인 로직은 템플릿 메서드에 둔다.

2) 구체클래스 스타일에 맞게 추상메소드를 오버라이드하여 구현한다.

3) 추상메소드를 제외하고, 일반메소드(Hook메소드)를 사용할지 말지는 자유.

 

'CS' 카테고리의 다른 글

알고리즘 정렬기본  (0) 2020.05.15
  (0) 2020.05.09
ETC  (0) 2020.02.11
네트워크  (0) 2020.02.11
운영체제  (0) 2020.02.11