Development/디자인패턴

    싱글톤 패턴 - 파이썬

    싱글톤 패턴 - 파이썬

    Singleton 싱글톤 패턴은 면접 때 "알고있는 디자인 패턴 있어요?" 라고 하면 잘 모르는 사람이라도 머리속에 "음.. 싱글톤패턴..?" 이라고 한번쯤 생각해보지 않았을까? 싶을 정도로 제일 유명한 패턴 중 하나라고 생각한다. 하지만 막상 설명해보려고 하면 "인스턴스가 하나임을 보장 받을 수 있는 패턴입니다"를 제외하고 제대로 설명하기 위해 내용을 정리해보고자 한다. 의도 클래스에서 만들 수 있는 인스턴스가 오직 하나일 경우에 이에 대한 접근은 어디에서든지 하나로만 통일하여 제공할 수 있도록 한다. 동기 어떤 클래스의 경우, 정확히 하나의 인스턴스만을 갖도록 하는 것이 중요하다. 예를 들어 시스템에 많은 프린터가 있더라도, 프린터 스풀은 오직 하나여야 하는 것처럼 말이다. 어떻게 하면 우리는 클래스..

    디자인 패턴을 이용하는 방법 (5)

    디자인 패턴을 이용하는 방법 (5)

    지난 포스팅에서는 디자인패턴을 활용하여 변화에 대비한 설계를 진행하는 방법에 대해 알아보았다. 이번 포스팅은 디자인 패턴을 이용하는 방법의 마지막 포스팅으로, 디자인 패턴을 고르는 방법과 디자인 패턴 사용 방법을 총 정리해보려고 한다. 디자인 패턴을 고르는 방법 GoF의 디자인 패턴에서 다루는 패턴은 20가지가 넘는다. 어떠한 문제 상황을 해결하기 위해 어떤 패턴을 써야할지 정확하게 판단하는 것은 분명 어려운 일이다. 특히 이런 디자인패턴이 생소한 개발자라면 더욱 어려울것이다. 지금부터 문제 해결에 적합한 패턴을 찾아내는 여러가지 접근 방법에 대해 알아보도록 하자. 패턴이 어떻게 문제를 해결하는지 파악하자 지금까지의 포스팅에서는 디자인 패턴이 어떻게 적합한 객체를 찾고, 객체의 크기를 결정하며, 어떻게 ..

    디자인 패턴을 이용하는 방법 (4)

    디자인 패턴을 이용하는 방법 (4)

    변화에 대비한 설계 지난 포스팅에서는 디자인 패턴의 재사용성에 대해 알아보았다. 디자인 패턴을 통해 재사용을 최대화 하기 위해서는 새로운 요구사항과 기존의 요구 사항에 발생한 변경을 예측하여 시스템 설계가 진화할 수 있도록 해야한다. 변화에 잘 대응하기 위한 소프트웨어를 설계하기 위해서는 미래에 일어날 변화를 어떻게 수용할 것인가를 미리 고려해야 한다. 변화를 수용하지 못하는 설계는 앞으로 재설계를 필요로 하게 된다. 이런 변경들은 클래스의 재설계와 재구현, 수정과 그에 따른 새로운 테스팅을 유발하는데, 재설계의 영향은 프로젝트의 여러 부분에 영향을 끼칠 수 있고, 예측하지 못한 변경은 많은 비용을 발생한다. ** 극 공감이다. 처음의 설계가 잘못되어 설계를 수정한다는 것이 어떻게 보면 프로그램의 근간을..

    디자인 패턴을 이용하는 방법 (3)

    디자인 패턴을 이용하는 방법 (3)

    지난 포스팅에서는 객체, 인터페이스, 클래스, 상속의 개념에 대해서 살펴 보았다(상단 링크 참고). 이번 포스팅에서는 디자인 패턴이 어떻게 이런 개념들을 유연하고 재사용 가능한 소프트웨어에 적용 시키는지 살펴보자. 재사용 가능한 소프트웨어 객체지향 시스템에서 기능의 재상용을 위한 가장 대표적인 방법은 상속과 객체 합성이다. 앞선 포스팅에서 상속에 대해서 알아봤으나, 객체 합성은 생소한 단어일 것이다. 객체 합성은 클래스 상속에 대한 대안으로, 새로운 기능성을 위해서 객체들을 합성하는 것이다. 객체를 합성하기위해서는 합성할 객체들의 인터페이스를 명확하게 정의해야 한다. 즉, 객체의 내부는 공개되지 않고 인터페이스를 통해서만 재사용 된다. 이 때문에 다른 클래스를 이용해서 한 클래서의 구현을 정의하는, 즉 ..

    디자인 패턴을 이용하는 방법 (2)

    디자인 패턴을 이용하는 방법 (2)

    이전 포스팅에서 객체에 대한 내용과 객체의 크기에 대한 결정을 하는 방법, 그리고 인터페이스에 대해 간단하게 다뤄 보았다. 이번 포스팅에서는 실제로 객체를 어떻게 정의하는지에 대해서 이야기 해보고자 한다. 객체 구현 명세하기 객체의 구현은 클래스에 정의한다. 클래스는 객체 내부의 데이터, 데이터의 표현방법, 그리고 오퍼레이션을 정의하여 객체를 구현한다. OMT(Obejct Modeling Technique) 기반의 표기법에서는 클래스를 표현하는 사각형에 볼드체로 클래스의 이름을 표현한다. 오퍼레이션의 이름은 클래스 아래 칸에 나열하고, 클레스가 정의하는 데이터는 오퍼레이션 아래 칸에 표시한다. 즉, 클래스의 이름, 오퍼레이션, 데이터 순으로 구분하여 표시한다. ** operation의 type은 반환 t..