본문 바로가기

프로그래밍/디자인패턴

(15)
[디자인패턴] =================================================
[디자인패턴] Bridge 패턴 브릿지는 추상화 부분과 구현 부분을 분리하는 패턴입니다. 기능(추상화 부분)과 구현을 별도의 클래스로 정의해 분리하는 방법으로 두 클래스를 서로 다른 계층 구조에 넣어 모두 변경 가능하게 합니다. 기능과 구현을 각각 정의한 후 구현에 관련된 클래스를 기능 클래스가 포함!합니다. 이렇게 하면 기능과 구현이 분리된 것을 알 수 있고, 최적화된 클래스 설계가 가능합니다. 또한 구현을 완전히 숨길 수 있다는 장점이 있습니다. 예를 들어보면, 두 클래스 무기와 종족이 있습니다. #pragma once #include using namespace std; // 무기 class cWeapon { public: cWeapon(void) {}; virtual ~cWeapon(void) {}; // 사용하기 virtual..
[디자인패턴] 어댑터 패턴 (Adapter Patten) 어댑터 패턴이란, A는 원래 존재하던 클래스 혹은 시스템입니다. 이것을 클래스 B에 적용시키려고 했더니 인터페이스가 달라 호환이 복잡해지게 생겼습니다. A와 B클래스는 변경이 불가능하고 둘은 연결시켜야 합니다. 어떻게 해야할까요? 이때 두 클래스를 연결시키려고 사용하는 것이 어댑터입니다. 정의는 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환하는 것으로 어댑터를 이용해 인터페이스 호환성 문제때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다. 쉬운 예로 들어봅시다. 예전에는 모두 아날로그 방송이였습니다. 하지만 지금은 디지털 방송으로 바뀌었지요? 디지털 방송을 예전 티비로 보기위해선 SetTop Box를 설치해야 합니다. 이 SetTop Box가 어댑터로 아날로그 ..
[디자인패턴] 팩토리 메소드 패턴 팩토리 패턴은 대표적인 생성 패턴 중 하나로 느슨한 결합을 이용하는 디자인입니다. 객체의 인스턴스를 만드는 작업이 항상 공개되어있어야 하는 것은 아니며, 공개를 할 때 객체간 결합의 문제가 발생할 수도 있습니다. 팩토리 패턴을 이용해 불필요한 의존성을 없앨 수 있습니다. 구조를 설계할 때 인터페이스에 맞춰서 코딩하면 변화에 열려있는 코드가 됩니다.패턴에서 가장 중요한 것중 하나는 캡슐화라는 개념으로 바뀌는 부분과 바뀌지 않는 부분을 분리하고, 바뀌는 부분을 묶어두는 것입니다.팩토리에서의 캡슐화는 생성을 묶어놓습니다. 간단한 팩토리를 보겠습니다. Pizza OrderPizza(char* pType) { Pizza m_pizza; // 피자 생성 if(strcmp(pType,"치즈")) { m_pizza =..
[디자인패턴] Facade 패턴 Facade의 뜻은 정면, 표면이라는 뜻입니다. 퍼사드 패턴은 어떤 서브 시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공하고, 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브 시스템을 더 쉽게 사용할 수 있습니다. 퍼사드 패턴을 만들기 위해서는 어떤 서브 class에 속한 일련의 복잡한 클래스들을 단순화하고, 통합한 클래스를 만들어야 합니다.다른 패턴과 달리 추상화같은게 필요없어 단순한 편으로, 퍼사드를 이용하면 클라이언트와 서브시스템이 긴밀하게 연결되지 않아도 되고, 객체지향의 원칙을 준수하는데 도움이 됩니다. 간단히 말하면 단순화된 인터페이스를 통해 서브시스템을 더 쉽게 사용하게 합니다. 퍼사드 패턴의 장점은 더 간단한 인터페이스를 만들 수 있다는 것이 있습니다. 또한 클라이언트 구현과..
[디자인패턴] 디자인 패턴 포스트를 시작하면서 & 디자인 패턴에 대해 디자인 패턴 스터디를 어제부로 시작했습니다. OpenCV나, 셰이딩 입문이나 벌여놓은 건 많은데 괜히 또 일벌이는거 아닌가 싶지만, ...스터디 기회는 흔치 않으니까요. 현재로써는 23개의 패턴을 모두 포스팅 할 계획입니다.포스팅 잘해놓으신 다른 분들도 많은데 나도 굳이 해야할까? 이런 생각도 들지만 해놓으면 (저에게) 도움이 될 거라 생각합니다. 우리는 조금 더 유연하고 편리한 프로그래밍을 위해 프레임 워크, 라이브러리등을 사용합니다. 프로그래밍시 상황에 따라 이런 적절한 도구를 사용하는 것은 매우 중요한 능력입니다. 꽤 괜찮은 도구가 있음에도 이를 활용하지 않는 것은 시간과 비용의 낭비입니다. 하지만 이 도구를 적재적소에 활용하지 못하는 것 또한 낭비겠지요. 때문에 우리는 도구를 잘~ 사용하기 위해 ..
[디자인패턴] 싱글톤 패턴 (Singleton Patten) 싱글톤 패턴 디자인 패턴이란 개발자들의 개발 방법( 즉, 패턴 )을 조사하여 정리한 것으로 약 25개가 존재한다. 싱글톤 패턴이란 디자인 패턴에서 가장 많이 쓰이는 패턴 중 하나이다. 하나의 프로그램 내에서 하나의 인스턴스만 만들어지고 어디서든지 그 인스턴스에 접근할 수 있도록 만든 패턴이다. 객체를 메모리에 한번만 올려 사용하는 패턴으로 클래스에 하나만 존재하고 주로 매니저급 관리자 클래스에서 사용된다. 관리자로써 필요한 애들만 매니저로 만들어서 사용하는 것이다. 싱글톤을 많이 사용하면 뒤엉킨 코드 즉 스파게티 코드가 되어 문제가 된다. 클래스의 공용으로 쓰이는 것이므로 남발 할 수 없고, 메모리 관리자를 쓰게되면 할당할 때마다 포인터를 할당하는 스마트 포인터가 된다. 즉, 자기가 알아서 지워줄때를 판..