티스토리 뷰

개발/알고리즘

디자인 패턴

겸겸이 2018. 3. 7. 15:59

디자인 패턴이란?

객체지향 프로그래밍에서 공통적인 디자인 문제를 찾아내고 해결하는 가이드라인

디자인패턴은 프레임워크나 클래스 라이브러리와 달리 추상적인 것

실제 코드를 제공하는 것이 아닌 특정 유형의 프로그래밍 문제를 해결하는 방식을 제공해주는 역할

잘못 사용할 경우, 쓸데없이 복잡해지거나 버그가 발생할 수도 있음


디자인 패턴을 사용하는 이유

1. 여러 프로그래머들의 경험과 지혜를 모아서 소프트웨어 디자인 문제를 해결하는데 도움이 될 수 있도록 만들어 놓은것이기 때문에

2. 디자인 문제나 해결책을 논할때 간결한 용어모음을 제공하기 때문에


디자인 패턴의 3가지 범주

1. 생성 디자인 패턴

클래스 선택 및 객체 생성을 관리하기 위한 패턴.

o 싱글톤 패턴

어떤 클래스의 인스턴스 개수가 최대 한개를 넘지 않도록 하는 패턴

애플리케이션에서 새 인스턴스를 만들 수 없고, 모든 매소드는 싱글톤을 통해서만 액세스할 수 있음

싱글톤은 객체이기 때문에 부모 클래스로부터 상속을 받고 인터페이스를 구현할 수 있음

싱글톤을 생성하기 위해 사용하는 클래스를 컴파일시가 아닌 실행시에 결정할 수 있음

애플리캐이션을 시작할때 최초 한번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용하기 때문에 메모리 낭비를 방지할 수 있음

public class Singleton {

    private static Singleton instance;


    private Singleton(){}


    public static Singleton getInstance(){

        if( instance == null ){

            instance = new Singleton();

        }

        return instance;

    }


o 빌더 패턴

객체가 어떤식으로 구축되는지에 대해 모르는 상황에서 단계별로 객체를 생성하는 패턴

객체를 초기화하는데 여러개의 매개변수가 여럿 필요한 경우에 특히 이 빌더 패턴이 유용함

// 빌더를 사용하지 않았을 경우

public class Window {

  public Window(boolean visible, boolean modal, boolean dialog){

    this.visible = visible;

    this.modal = modal;

    this.dialog = dialog;


private boolean visible;

private boolean modal; 

private boolean dialog;

}


Window w = new Window(false, true, true);

// 빌더를 사용했을 경우

public class WindowBuilder {

   public WindowBuilder(){

       public WindowBuilder setDialog(boolean flag){

           dialog = flag;

           return this;

       }


       public WindowBuilder setModal(boolean flag){

           modal = flag;

           return this;

     }

      ....


Window w = new WindowBuilder().SetVisible(false).SetModal(true).SetDialog(true).build();


2. 행위 디자인 패턴

클래스와 객체가 서로 작용하고 통신하는 방법에 관한 패턴

o 반복자

어떤 자료구조에 들어있는 모든 원소를 따라갈 수 있음

이때 각 원소가 어떤식으로 저장되고 표현되는지 몰라도 됨

요즘 만들어진 언어는 대부분 반복자를 자체적으로 지원함

o 옵저버

그 객체의 상태에 대해 관심을 가지고 있는 옵저버에게 자신의 상태가 바뀌었음을 널리 알릴 수 있음

옵저버는 갱신사항을 알려주기 위해 만들어 놓은 어떤 인터페이스를 써서 대상에 등록하고,

이 대상은 상태가 바뀔 때마다 등록된 옵저버에게 상태 변경을 알림

MVC(모델 - 뷰 - 컨트롤러) 구조도 옵저버 패턴의 일종 : 모델이 변경되면 자동으로 뷰가 새로 그려지기 때문


3. 구조 디자인 패턴

클래스와 객체 사이의 관계를 구성하는 범주의 패턴

서로 연관된 객체들을 함께 사용하여 원하는 일을 하기 위한 가이드라인을 제공함

o 데코레이터

한 객체를 그 객체와 같은 인터페이스를 구현하는 다른 객체로 감싸서 형태를 바꿔주는 패턴

GUI 툴킷이 대표적인 예시


'개발 > 알고리즘' 카테고리의 다른 글

SQL 기본 문법  (0) 2018.02.21
연구소  (0) 2018.02.05
방속의 거울  (0) 2018.02.05
콜라츠 추측  (0) 2018.02.05
회전하는 큐  (0) 2018.02.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함