프로그래밍(Basic)/디자인 패턴(Java)

    [바미] Composite 패턴에 대해 알아봅시다.

    안녕하세요. 오늘은 Composite 패턴에 대해 디렉터리를 예를 들어 알아보려고 합니다. Composite라는 말은 합성물이라는 의미로 쓰이고 있습니다. 컴포지트 패턴(Composite pattern)이란 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 한다. 라고 정의 할 수 있습니다. 컴퓨터 파일 시스템에 디렉터리라는 것이 있고, 그 디렉터리 안에는 어떤 파일이 있거나 다른 디렉터리가 있기도 하죠. 디렉토리와 파일을 합해서 디렉토리 엔트리라고 부르기도 합니다. 디렉토리 엔트리라는 이름으로 디렉토리와 파일과 같은 종류로 간주하고 있는데 예를 들어 어떤 디렉토리 안에 무엇이 있는지를 차례대로 조사한다고 가정할 때 차례대로..

    [바미] Strategy 패턴에 대해 알아봅시다.

    안녕하세요 오늘은 Strategy 패턴에 대해 알아보고자 합니다. Strategy라는 의미는 전략이라는 의미를 갖고 있습니다. 보통 전략은 적군을 어떻게 상대하는 등의 어떤 승부를 위한 계획으로 주로 사용하는데요. 프로그래밍으로 치면 알고리즘으로 생각해도 됩니다. 모든 프로그램은 어떤 문제를 해결하기 위해 만들어졌고, 작성되는데 이 문제를 해결하기 위해서 그것에 맞는 알고리즘으로 구현되고 있죠. Strategy 패턴은 알고리즘을 빈틈없이 교체해서 같은 문제를 다른 방법으로도 쉽게 해결 할 수 있도록 도와주는 패턴이라 생각하면 이해하기 쉬우실 것 같네요. Strategy패턴으로 만들어 볼 예제는 컴퓨터에서 가위바위보를 실행해주는 코드입니다. 가위바위보의 전략을 두 가지 방법이 있는데 이기면 다음에도 같은 ..

    [바미] Bridge 패턴에 대해 알아봅시다.

    안녕하세요. 오늘은 Bridge 패턴에 대해 알아 보려고 합니다. Bridge는 다리라는 의미를 가진 영어 단어 입니다. 실제로 다리가 하는 역할은 강 양쪽의 장소를 연결하는 역할을 한다고 합니다. 요번에 알아볼 Bridge 패턴 역시 '기능의 클래스 계층'과 '구현의 클래스 계층'이라는 두 장소를 연결하는 역할을 하는데요. 기능의 클래스 계층과 구현의 클래스 계층을 모른 상태에서 접하신다면 조금 어려우실 겁니다. 먼저 이 두 곳의 장소를 알아보고 갑시다. 계층은 크게 새로운 기능을 추가하고 싶은 경우, 새로운 구현을 추가하고 싶은 경우로 두가지 역할을 합니다. 새로운 기능을 추가하고 싶은 경우 어떤 클래스가 있다고 가정했을 때 그 클래스에 새로운 기능(새로운 메소드)을 추가하고 싶은 경우 그 클래스의 ..

    [바미] Builder 패턴에 대해 알아봅시다.

    안녕하세요. 오늘은 Builder 패턴에 대해 알아보려고 합니다. 흔히 Build라는 단어는 구조를 가지고 건물 등을 지을 때 사용할 때 쓰는 단어입니다. 보통 건물을 세울 때 밑에 지반을 다지고, 골격을 세우고, 아래에서 위로 조금씩 만드는 형식이죠. 그리고 그 건물이 어려울 수록 한 번에 세우는 것 또한 쉽지 않죠. 보통은 전체를 구성하고 있는 부분들을 단계를 나누어 짓게 되는데요. 이런 형식의 구조를 가진 인스턴스를 쌓아 올리는 디자인 패턴이 Builder 패턴이라고 합니다. 이제 예제 프로그램을 만들어 볼 건데요. Builder 패턴을 사용하여 문서를 작성하는 프로그램을 만들어 보도록 하겠습니다. 여기에서는 다음과 같은 구조를 가지고 있는데요. 타이틀을 한 개 포함한다. 문자열을 몇 개 포함한다...

    [바미] Prototype 패턴에 대해 알아봅시다.

    안녕하세요. 오늘은 Prototype 패턴에 대해 알아볼 것인데요. 보통 인스턴스를 작성할 때 new Instance(); 이런식으로 new라는 Java언어의 키워드를 사용해서 클래스 이름을 지정해서 인스턴스를 생성하실 겁니다. 이 처럼 new로 인스턴스를 만들 경우에 클래스 이름도 반드시 지정해야 하지만 클래스 이름을 지정하지 않고 인스턴스를 생성 할 때도 있어요. 종류가 너무 많아 클래스로 정리되지 않는 경우 클래스로부터 인스턴스 생성이 어려운 경우 framework와 생성할 인스턴스를 분리하고 싶은 경우 가 그 예인데요. 1번의 경우 취급하는 오브젝트의 종류가 너무 많아서 각각을 별도의 클래스로 만들어 다수의 소스 파일을 작성해야 하는 경우를 말하구요. 2번의 경우 생성하고 싶은 인스턴스가 복잡한 ..

    [바미] Singleton 패턴에 대해 알아봅시다.

    안녕하세요 오늘은 싱글톤 패턴에 대해 알아 볼 것입니다. 디자인 패턴을 공부하셨던 분이라면 아주 친숙한 디자인 패턴 중에 하나인데요. 흔히 "싱글톤 패턴이 뭐에요?" 라고 물으면 대게는 "1개의 인스턴스를 사용하는 디자인패턴이요." 라고 답합니다. 맞는 말이긴 하지만 뭔가 아쉬운 답변이죠? 이 부분에 대해 조금 자세히 알아봅시다. 보통 프로그램을 실행하게 되면 많은 인스턴스가 생성되는데요. Java로 예를 들어 문자열을 표시하는 java.lang.String 클래스의 인스턴스는 생성된 1개의 문자열 당 1개의 인스턴스가 생성되게 됩니다. 예를 들어 1000개의 문자열이 생성된다 했을 때 10000개의 인스턴스가 만들어지게 돼요. 그런데 클래스의 인스턴스가 딱 하나만 필요한 경우가 있어요. 보통 시스템 안..

    [바미] Factory Method에 대해 알아봅시다.

    이번에는 Factory Method에 대해 알아보려 합니다. Factory Method의 Factory는 공장이라는 의미인데요. 이 공장은 인스턴스를 생성하는 곳이라 생각하면 됩니다. 이 공장은 전에 배웠던 Template Method패턴으로 구성되어 있습니다. 이 패턴에서는 인스턴스를 만드는 방법을 상위 클래스 측에서 결정하지만 구체적인 클래스 이름까지는 결정하지 않습니다. 구체적인 내용은 모두 하위 클래스 측에서 수행하죠. 그래서 인스턴스 생성을 위한 Framework와 실제의 인스턴스 생성의 클래스를 분리해서 생각 할 수 있게 됩니다. 이제 예제 프로그램을 만들어봅시다! 이번에는 사원증을 만드는 프로그램을 만들어 볼 것인데요. 사원증을 만들기 위해 필요한 공장을 만들어 봅시다. 클래스 다이어그램은 ..

    [바미] 템플릿 메소드(Template Method) 패턴에 대해 알아봅시다.

    안녕하세요. 이번에는 템플릿 메소드에 대해 알아보려 합니다. 먼저 템플릿은 쉽게 말해 일정한 틀, 형식을 의미합니다. 붕어빵틀을 흔히 예로 드는데요. 이런식의 틀만 있을 때 내용물만 조금씩 변경 해주기만 하면 다양한 붕어빵을 만들 수 있을 겁니다. 또 나만의 붕어빵으로도 만들 수 있겠죠? ^_^ 이 처럼 이번에 살펴볼 템플릿 메소드 패턴은 이러한 템플릿의 기능을 가진 패턴인데요. 상위 클래스 쪽에 템플릿에 해당하는 메소드가 정의되어 있고, 그 메소드의 정의 안에는 추상 메소드가 사용되고 있습니다. 그래서 상위 클래스의 프로그램만 보면 추상 메소드를 어떻게 호출 하고 있는지 알 수 있지만 그 추상 메소드가 어떤 처리가 수행 되는지는 알 수 없어요. 추상 메소드를 실제로 구현하는 것은 하위 클래스 인데요. ..

    [바미] Adapter 패턴에 대해 알아봅시다.

    흔히 어댑터 패턴을 설명할 때 위의 어댑터의 역할을 예시로 많이 드는데요. 직류 15볼트로 동작하는 스마트폰을 교류 120볼트의 AC전원에 연결한다고 가정해볼게요. 이 때 AC 어댑터라는 장치를 사용하게 되는데요. AC 어댑터는 가정용 전원으로 제공되고 있는 교류 120볼트를 지금 필요한 직류 15볼트로 교환해 줍니다. 제공되고 있는 것과 필요한 것 사이를 연결 해주는 것이 바로 어댑터의 역할인데요. 어댑터의 사전적인 의미는 개조(adapt)시키는 것이라는 의미입니다. 그러니까 AC 어댑터의 역할은 직류 15볼트의 컴퓨터에 교류 100볼트의 환경에 맞게 바꾸는 것을 의미하는 것이죠. 이 처럼 프로그램 개발을 하다보면 이미 제공된 것을 그대로 사용할 수 없을 때 필요한 형태로 교환하고 사용하는 일이 자주 ..