디자인 패턴이란?

이정석·2023년 5월 23일
0

디자인패턴

목록 보기
1/23

디자인 패턴?

정보처리기사 자격증을 공부할 때나 학교 전공수업을 들으면서 여러가지 디자인 패턴에 대해서 들어보았지만 실제로 적용해보거나 자세한 구조에 대해서는 잘 모른다. 하지만 앞으로 개발자가 되고 일을하면서 코딩을 할 때 다음과 같은 상황을 고려해야 할 것이다.

  • 코드를 작성한 후 변경사항이나 추가사항의 반영이 쉽도록
  • 이후 컴파일이나 테스팅 과정에 있어서 시간이 오래 걸리지 않도록

왜?

당장 학부생인 내 시야에도 코드를 작성하기 전 고려해야할 사항들이 많다. 나보다 더 경력이 많고 실력이 있는 사람의 눈에는 어떤 사항들이 보일지를 생각하면

음... 지금이라도 공부해야겠다!

현재 가지고 있는 자료에는 나쁜설계에서 나는 냄새로 경직성, 부서지기 쉬움, 부동성 등등 많은 요소를 소개했지만 당장은 '디자인패턴'에 대한 포스팅을 작성하고 이후에는 'OOP'와 같은 내용들을 다룰예정이다.

디자인 패턴이란

상호 협력하는 클래스와 관련된 일반적인 설계 문제를 해결하는 반복적인 해결책
디자인 패턴은 정확한 해답이 아닌 비슷한 문제를 다루면서 얻은 노하우가 잘 정리된 것이다.


디자인 패턴을 사용하면?

  1. 의사소통이 쉬워진다
    A: 이 ‘foo’클래스의 객체는 하나만 생성해야 하는 데 어떤 방법이 좋을까?
    B: 싱글톤 패턴을 사용하면 될 것 같은데?
    A: 아 맞아. 그 패턴을 사용하면 되겠네!

  2. 코드의 재사용성이 증가하고 유지관리가 쉬워진다
    디자인 패턴을 적용함으로 전체적인 코드는 높은 응집낮은 결합을 유지하고자 할 것이다.
    이는 각 클래스가 다른 클래스에 미치는 영향을 최소화한다는 것을 의미하고 이후의 리팩토링 과정이나 클래스 변경하는데 유연하게 해준다는 것을 의미한다.

  3. 코드가 효율적이고 신뢰성이 높아진다
    디자인 패턴은 특정 문제를 해결하기 위한 효율적인 방법을 제공하고 이는 다른 곳에서 이미 사용 되었거나 검증이 된 방법이다.
    접근제어자(public, private, protected), 중첩 클래스(nested class) 로 다른 객체에 대한 접근을 차단하거나 공통부분을 상속으로 상위클래스에 구현함으로 중복코드를 제거할 수 있다.


디자인 패턴의 표현

디자인 패턴을 정확하게 표현하려면 구조적인(정적인) 측면행위적인(동적인) 측면을 표현해야 한다.

  1. 구조적(정적) 측면

    구조적 측면을 나타낼 때 주로 UML의 클래스 다이어그램을 사용한다. 클래스 다이어그램은 시간에 따라 변하지 않는 시스템의 정적인 면을 보여주는 대표적인 구조 다이어그램이다.
    ClassDiagramEx.png

  2. 행위적(동적) 측면

    행위적 측면을 나타낼 때 주로 UML의 시퀀스 다이어그램을 사용한다. 기능이 어떤 순서로 호출되고 실행되는지에 대한 시간적 요소가 포함되어 있다.
    SequenceDiagramEx.png


디자인 패턴에는?

GoF에서 23개의 설계패턴을 3가지(생성, 구조, 행위)의 유형으로 분류하였다.

  • 생성(creational) 패턴

    객체의 생성과 관련된 문제를 해결하는데 사용하는 패턴으로 객체 생성과 클래스 인스턴스화에 관련된 상세 로직을 숨기고, 객체를 생성하는 방식을 좀 더 유연하게 만드는 것을 목표로 한다.

  • 구조(structural) 패턴

    클래스와 객체가 함께 형성하는 구조를 설계하고, 클래스와 객체 간의 관계를 쉽게 이해하고 활용할 수 있도록 하는 패턴으로, 큰 문제를 작은 문제들로 분해하고, 작은 문제들을 함께 해결함으로써 더 큰 시스템을 구성하는 것에 중점 둔다.

  • 행동(behavioral) 패턴

    클래스나 객체들이 상호작용하는 방식과 그로 인해 분산되는 책임들을 관리하는 패턴으로 행위 패턴은 객체들 사이의 역할을 명확하게 하고, 객체들이 서로 통신하는 방식을 정의하며, 런타임에 행동을 변경할 수 있도록 한다.

profile
게임 개발자가 되고 싶은 한 소?년

0개의 댓글