본문 바로가기
Study

디자인 패턴

by ca.rrot 2022. 7. 21.

목차.

1. 디자인 패턴이란?
2. 디자인 패턴의 필요성
3. 디자인 패턴 구조
4. 디자인 패턴 종류
5. 디자인 패턴에 대한 개인적인 생각

 

 

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

디자인 패턴은 코드나 알고리즘이 아니며 소프트웨어 설계 시 발생하는 문제에 대한 해결책입니다.

 

패턴(pattern)의 사전적 의미는 일정한 형태나 유형입니다. 소프트웨어 관점에서 바라보면 개발할 때 공통적인 문제들이 존재하고 그에 대한 해결책들이 존재합니다. 이때 공통적인 문제에 대한 해결책에 누군가가 이름을 붙이고 상세한 설명을 기술하면서 해결책이 패턴으로 굳혀진 것입니다.

 

패턴의 유래

 

패턴의 개념은 건축분야에서 시작되었습니다. 1977년 크리스토퍼 알렉산더의 'A Pattern Language: Towns, Buildings, Construction'에서 처음 기술되었습니다. 이 책은 도시환경을 디자인하기 위한 '언어'를 설명합니다. 이 언어의 단위는 패턴이고 창문이 얼마나 높아야 하는지, 건물이 몇 층을 가져야 하는지, 이웃에서 녹지가 얼마나 커야하는지에 대해 설명합니다.

 

1994년 네 명의 저자(Erich Gamma, John Vlissides, Ralph Johnson, and Richard Helm)는 'Design Patterns: Elements of Reusable Object-Oriented Software'를 출판했습니다. 재사용 가능한 객체지향 소프트웨어의 요소로서 설계 패턴의 개념을 프로그래밍에 적용했습니다. 이 책은 객체 지향 설계 시 발생하는 문제에 대한 23가지 패턴을 담았습니다. 이 책은 네 명의 저자로 인해 GoF(Ganf of four) 책이라고 불리게 되었습니다.

 

 

디자인 패턴의 필요성

예전에 저는 Android 개발을 할 때 activity에 대부분의 코드를 작성했었습니다. 프로젝트 규모가 점점 커질수록 코드가 복잡해지고 유지 보수가 힘들어졌습니다. 협업 과정에서도 코드가 복잡하다 보니 어려움이 발생했습니다. 이런 문제 때문에 디자인 패턴의 필요성을 느끼게 되었습니다.

 

디자인 패턴의 장점

1. 개발자 간의 원활한 의사소통

여러 디자인 패턴의 특성을 잘 알고 있어 문제 해결 시 어떤 디자인 패턴을 사용하면 좋을지 해결책을 논의할 수 있습니다.

 

2) 소프트웨어 구조 파악 용이
어떤 디자인 패턴이 설계할 때 사용되었는지 알면 소프트웨어 전체 구조를 쉽게 파악 가능합니다.
 
3) 재사용을 통한 개발 시간 단축
문제 해결을 위해 처음부터 끝까지 혼자 생각하는 것보다 이미 잘 만들어진 디자인 패턴을 사용하면 당연히 개발 시간이 단축됩니다. 
 
4) 설계 변경 요청에 대한 유연한 대처
사용자의 지속적인 추가 요청, 환경 변화 등의 설계 변경 요청에 쉽고 빠르게 대처가 가능합니다.

 

디자인 패턴 구조

디자인 패턴은 크게 3가지로 구성됩니다.

 

1. Context
문제가 발생하는 여러 상황을 기술합니다. 즉, 패턴이 적용될 수 있는 상황을 나타냅니다.


2. Problem
패턴이 적용되어 해결될 필요가 있는 여러 디자인 이슈들을 기술합니다.


3. Solution
문제를 해결하도록 설계를 구성하는 요소들과 그 요소들 사이의 관계, 책임, 협력 관계를 기술합니다.

 

 

디자인 패턴 종류

Gof 디자인 패턴

Gof(Ganf of four)는 에리히 감마(Erich Gamma), 리차드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리시디스(John Vissides) 이 4인방을 지칭합니다. 소프트웨어 개발 영역에서 디자인 패턴을 구체화하고 체계화한 사람들입니다. 23가지의 디자인 패턴을 정리하고 각각의 디자인 패턴을 생성(Creational), 구조(Structural), 행위(Behavioral) 3가지로 분류했습니다.

 

1. 생성 패턴(Creational Pattern) - 객체 생성에 관련된 패턴
2. 구조 패턴(Structural Pattern) - 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
3. 행위 패턴(Behavioral Pattern) - 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴

 

 

디자인 패턴에 대한 개인적인 생각

디자인 패턴은 특정 문제에 대한 해결책이지 모든 문제를 해결할 수는 없습니다. '디자인 패턴을 무조건 사용하자!' 보다는 '적절하게 필요한 곳에 알맞게' 쓰는 것이 중요하다는 생각이 듭니다. 남들이 다 쓰니까 그냥 사용하기보다는 내 코드의 구조와 문제점을 잘 파악하고 적절한 패턴을 활용하는 것이 필요하다고 생각합니다.

 

 

'Study' 카테고리의 다른 글

안드로이드 권장 아키텍처  (0) 2022.07.26
안드로이드 APK 구조  (0) 2022.07.06
안드로이드 OS 구조  (0) 2022.07.04
구글 안드로이드 역사  (0) 2022.06.29

댓글