Base/용어 개념

디자인 패턴이란? (Software Design Pattern)

koh1018 2022. 3. 26. 21:32
반응형

디자인 패턴이란?

- 과거 소프트웨어 개발 과정에서 발견한 설계 노하우를 패턴으로 정리한 것을 말한다.

 

장점

1. 코드 스타일이 비슷해진다 -> 의사소통을 효율적으로 할 수 있다.

2. 이미 검증된 구조이므로 설계를 빠르게 할 수 있다.

 

 

디자인 패턴은 목적에 따라 크게 세 가지로 나뉜다.

1. 생성 패턴

2. 구조 패턴

3. 행동 패턴

출처 : https://gmlwjd9405.github.io/images/design-pattern/types-of-designpattern.png

이 중 생성 패턴에서는 싱글턴, 팩토리 메서드, 구조 패턴에서는 어댑터, 행위 패턴에스는 템플릿 메서드를 알아보겠다.

 

 

 


 

 

 

1. 싱글톤 패턴 (생성 패턴)

- 인스턴스를 오직 1개만 생성하는 패턴

 

A, B, C라는 클래스가 있다고 하자.

이때 A, B, C 클래스에서 각각 D라는 클래스가 필요해 가져다 쓴다면 메모리에 같은 객체가 3개 생기게 된다.

만약 각각이 다른 정보, 다른 상태를 가지고 있다면 3개의 객체를 사용하는 것이 문제가 없지만 같다면 메모리 낭비가 되므로 문제가 된다.

 

싱글톤 패턴은 d = new D()와 같이 전역변수처럼 d를 미리 만들어두고 A, B, C에서 가져다가 쓰는 것이다.

즉, 인스턴스를 오직 1개만 생성하는 것이다.

 

이 밖에도

1. 스프링 컨테이너에서 객체들을 관리할 때

2. 자바에서 DB Connection 객체를 만들 때

3. 스레드 풀(스레드가 모여있는 풀)을 사용할 때 (스레드는 만들 때 시간이 오래걸린다 그래서 만들어놓고 가져가서 쓴다.)

기본적으로 싱글톤 패턴을 사용한다.

 

이런 싱글톤 패턴을 생성하는 방법에는 세 가지가 있다.

1. 이른 초기화 방식

2. 게으른 초기화 방식

3. Holder에 의한 초기화 방식

 

 

2. 팩토리 메소드 패턴 (생성 패턴)

- 객체를 직접 생성하지 않고 객체를 생성하는 Factory 객체를 사용하는 패턴

 

 

팩토리 메소드 패턴은 어떤 객체의 인스턴스를 생성할지를 서브 클래스에서 결정하는 디자인 패턴이다.

 

 

3. 어댑터 패턴 (구조 패턴)

- 어댑터를 사용하여 호환되지 않는 인터페이스를 호환되도록 하는 패턴

 

인터페이스가 바뀌더라도 변경된 내용이 어댑터 안에 캡슐화되므로 수정할 필요가 없다.

 

A라는 클래스를 extends한 두 클래스 B, C가 있다고 할 때 유사한 동작에 대해 B, C의 메소드가 다른 경우 A 클래스의 한 메소드로 전체 동작을 컨트롤 하고 싶을 때 사이에 어댑터를 사용한다.

 

 

4. 템플릿 메소드 패턴 (행위 패턴)

- 상속을 통해 부모 클래스의 기능을 확장할 때 사용하는 방법

 

부모 클래스에서 변하지 않는 기능을 구현해두고 자식 클래스에서 확장할 기능을 구현한다.

 

예시로 자바의 Abstract Map을 들 수 있다.

 

자바에는 Hash Map과 Tree Map이 있다.

이 둘을 구현한 클래스의 부모로 Abstract Map이라는 추상 클래스가 있다.

이 Abstract Map 추상 클래스에서는 아래 자식 클래스들의 공통적인 부분을 구현해둔다.

그리고 Hash Map과 Tree Map의 자료구조가 달라 코드가 변경되는 부분은 각각의 클래스 안에서 구현하게 한다.

 

이런 Abstract Map이 템플릿 메소드 패턴의 가장 대표적인 예시이다.

반응형