본문 바로가기
CS/소프트웨어 공학 에센셜

디자인 패턴

by k-mozzi 2021. 6. 22.
반응형
Preface

 

이번 장에선 복잡한 구조의 설계를 보다 쉽게 수행할 수 있도록 돕는 디자인 패턴에 대해 공부했다.

 

사전적 정의는 앞서 말한 것처럼 '보다 쉬운 설계를 위한 하나의 도구'라고 할 수 있지만, 이 도구가 과연 초보 개발자들에게도 유용할까?

 

나는 오히려 반대라고 생각한다.

 

만약 프로그래밍의 기초 단계만 알고 있는 초보 개발자들이 패턴을 사용하여 코딩을 하게 되면 수정하고 싶은 부분을 찾거나 원하는 출력물을 얻는 것이 오히려 복잡하게 느껴지지 않을까?

 

즉, 디자인 패턴을 유용하게 사용하기 위해선 어느 정도의 개발 지식과 코딩 실력이 필수적이며, 많은 경험을 필요로 한다고 생각한다. 


- 패턴 : 자주 발생되는 문제들을 해결하고자 할 때 일정하게 반복되는 솔루션

 

- 무아레 패턴(moire pattern) : 두 개 이상의 주기적 패턴(periodic pattern)이 겹쳐 생기는 간섭무늬


1. 소프트웨어 디자인 패턴이란 무엇인가

 

- 소프트웨어를 설계할 때 특정 상황에서 자주 사용하는 패턴을 정형화한 것이다.

→ 개발자들의 경험적 산물

 

- 특징

① 경험을 통해 얻을 수 있음

② 특정 형식을 갖고 체계적으로 작성됨

③ 패턴에 각기 다른 추상화 수준이 존재하며 계속적으로 진화함

 

- 장점

① 소프트웨어 품질 향상

② 의사소통에 도움

③ 소프트웨어 개발 비용 절감

④ 소프트웨어 재사용성 증가


2. 디자인 패턴의 기술 형식

 

[패턴의 기술 형식]


3. Gof의 패턴 분류

 

[Gof의 패턴 분류]


4. 디자인 패턴 활용

 

- 라이브러리(library) : 비휘발성 자원의 모임

 

- 패턴의 종류


 

[Singleton 패턴 구조]

 

 

[Facade 패턴 구조]

 

※ 다형성과 동적 바인딩 적용

 

[Strategy 패턴 구조]

 

 

[Factory Method 패턴 구조]

 

 

[Adapter 패턴 구조]



5. 패턴을 이해하기 위한 지식 '다형성'과 '동적 바인딩'

 

- 다형성(polymorphism)

① 같은 오퍼레이션이 다른 클래스에서 다르게 동작하는 것

② 하나의 함수 이름 및 연산자가 여러 목적으로 사용될 수 있는 것

③ 상위 클래스를 통해 하위 클래스의 메소드를 호출할 수 있도록 하는 것

 

- 동적 바인딩(run-time binding) : 실행 시간에 하위 클래스의 객체를 통해 동작이 정해지는 것


6. 패턴의 남용

 

- 패턴을 남용하지 않기 위해선 패턴을 정확히 이해하고, 상황에 따라 패턴을 유연하게 사용할 수 있는 설계 능력을 갖추는 것이 필요하다.

 

 

 

 

 

참고 문헌 : 윤청, 소프트웨어 공학 에센셜(생능출판), 2019, p.362~386.

728x90
반응형

댓글