오랜만에 디자인 패턴을 공부하는 것 같다. 이 패턴에 대해 간략하게 설명하자면, 공통 부분을 미리 만들어 놓고 그것을 가져다 쓰는 방식이다. 이 패턴은 상속을 통해 이뤄진다. 상속? 상속을 사용한다는 뜻은 부모와 자식의 관계가 명확하다는 이야기다. 즉, 부모쪽에 공통 부분을 뽑아 내고 자식 쪽에서 그것을 오버라이딩 하는 것이다. 예제를 고민해봤는데 생각보다 쉽지 않을 것 같다. 간단하게 숫자를 계산하는 계산기를 만들어 보려구 한다. 시작 public int calculate() { return get(1, 2, 3, 4); } private int get(int... numbers) { int result = 1; for (int number : numbers) { result *= number; } r..
퍼사드는 사실 불어다. 건물 외각이라는 뜻을 가졌다. 퀴즈를 하나 낼 태니 한번 맞춰보시길 이 회사에는 현재 몇명의 개발자가 일하고 있는가? (어디든 앉아서 일하고 있는 사람만) 이 회사는 어떤 회사일까? 첫 번째 질문 같은 경우는 즉, 화장실에 갔던가 휴가 중인 인원 등을 제외하라는 뜻이다. 아마 100%확률로 틀릴 것이다. 심지어 이 회사를 다니고 있는 사람들 모두 이 문제를 틀릴 것이다. 왜냐하면 화장실를 간 사람들을 일일이 세면서 이 문제를 맞출 이유는 없기 때문이다. 아니 애초에 말도 안되는 문제이기 때문이다. 어떻게 외각만을 보고 문제를 맞춘다는 건 말이 되지 않기 때문이다. 하지만 두 번째 질문은 대답이 가능하다. 이런식으로 외부 코드만 확인해서 외부 코드만 보고서 어떤 동작을 하는지 대략적..
디자인 패턴을 공부하면서 놓쳐서면 안되는 사실은 절대로 코드로 학습을 하면 안된다는 사실이다. 나는 브릿지 패턴을 공부하면서 이에 더 실감했다. 물론, 코드 자체도 디자인 패턴이지만 사실 그것 보다 중요한 건 어떻게 그 코드를 작성했는가가 중요하다. 인터페이스를 사용하고 클래스를 사용하는 건 그렇게 까지 중요한건 아니다. 아무튼 지금 내가 작성 하는 부분은 브릿지 패턴이다. 브릿지는 다리라는 뜻이다. 즉, 코드 상에서 다리를 내려줘야 하는데 어떤걸로 하는 것이 유리할까? 클래스로 해도 상관없고 인터페이스로 해도 상관없다. UML을 보면 인터페이스로 되어있는데 이는 사실 인터페이스 interface 이게 아니다. 그냥 추상적으로 표현 할 수 있다는 뜻이다. 저번 포스팅에서 전략 패턴에 대해 공부하였다. 전..
이 패턴 생각보다 쉽지 않다. 패턴에 대해 간략하게 설명하면 전략을 구분짓는 패턴이다. 당연한 이야기 지만 이런이야기는 누구나 할 수 있다. 그러면 다음 코드를 보고 이것이 어떤 패턴인 맞출 수 있을까? Template template = new Template(new Action()); 지금까지 학습한 팩토리, 추상 팩토리, 빌링, 프로토 패턴인데 이것만 봐도 아쉽게도 전략패턴인지 확신을 가질 수 없다. 이는 저번 포스트에서 말했듯이 관점에 따라 패턴의 이름이 달라질 수 있다. 디자인 패턴을 공부하면서 빌더 패턴 처럼 딱 떨어지는 패턴이 있는 반면에 대부분 패턴들은 딱 떨어지지 않는다는 사실을 알 수 있다. 누군가가 위 코드는 추상 팩토리 패턴이라고 말한다면, 틀린것일까? 지금은 추상 팩토리와 전략 패..
디자인 패턴을 공부하면서 하나씩 공부할때는 생각보다 쉬운데 여러개를 동시에 공부하거나 다른 패턴을 공부를 해야 되는 상황이라면 헷갈리는 경우가 굉장히 많았다. 디자인 패턴에서는 이러한 양상이 종종 발생이 되며, 대표적으로 팩토리 메소드 패턴이랑 추상 팩토리 패턴이 존재한다. 이렇게 비슷한 패턴들이 많은 이유는 관점때문이라고 한다. 그러면 이 두개의 패턴은 어떻게 관점이 다른지 확인해보자. 어떻게 보면 두 개모두 팩토리 즉, 공장에서 무언가를 만드는 듯한 느낌을 준다. 그러면 뭐가 다른 걸까? 이름 부터 이 두가지 패턴은 다르다는 느낌을 강력하게 받는다. 처음에 팩토리 패턴을 생각했을 때, 인터페이스 또는 추상 클래스를 통해 만든것을 직접적으로 사용한다고 생각했다. 물론, 이게 맞을 수 있겠지만, 이 접근..
싱글톤 패턴은 내가 생각하기에 가장 만들기 쉬우면서 가장 위험한? 패턴이라 생각이 든다. 원래 블로그를 작성하지 않고 머릿속에 정리할 생각이 었지만 아무리 생각해도 답이 나오지 않다는 생각에 이렇게 작성하게 되었다. 일단 싱글톤 패턴이 무엇인지 부터 생각 해야 된다. 싱글톤 패턴은 싱글, 즉 객체가 하나로 나오는 패턴이다. 우리가 알기로는 일반적으로 객체는 생성할때마다 다른 객체가 나오는 것이 당연한이야기다. 다시말해 사람이라는 클래스가 존재한다면, 각자 다른 사람인것 처럼 객체도 마찬가지로 생성할때마다 다르게 나오는게 정상이다. 싱글톤 패턴은 이 정상적인 행동을 제약하는 패턴이라 생각이 든다. 위에서 언급했듯이 싱글톤 패턴을 이용하게 되면 아무리 객체를 많이 만들어도 같은 객체가 나온다는 뜻이다. 근데..
탬플릿? 뭔가 느낌이 일정한 모형 틀을 만들어 놓고, 그 틀을 계속 사용하는 느낌이다. 구글에서 템플릿 관련 이미지를 찾았다. 죄다 ppt관련 이미지 밖에 없었다. 왜 ppt를 만들때 템플릿을 사용할까? 가장 뻔한 이유로는 편하기 때문이다. 어차피 제목 이나 내용빼고는 이미 구현되었기 때문에 우리는 제목과 내용만 추가하면 된다. 물론 내가 발표할 주제와 ppt의 상관관계는 지켜야 하겠지만... 근데... 디자인 패턴에서는 템플릿을 어떻게 사용할까? 사실 이름에는 메소드라는 단어가 숨겨져 있다. 메소드가 있는 이유는 이 패턴은 메소드의 역할이 크기 때문이다. 예를들어 A라는 클래스와 B라는 클래스를 만든다고 가정하자. 근데 A와 B클래스는 공통적으로 사용되는 메소드가 있다. 이 메소드를 한곳에 넣어주면 된..
오랜만에 작성하는 것 같다. 프록시 이후로 9일만에 작성하는데.... 아무튼 빌더 패턴은 객체의 생성을 맡는다. 객체의 생성하면 가장 먼저 떠오르는 패턴은 팩토리 패턴이지만... 팩토리 패턴과는 또 다른 매력으로 다가온다. 사실 빌더 패턴이 만들어진 이유는 정확히 뭔지는 모르지만 하나 확실한것은 간결함과 뚜렷함을 얻을 수 있다. 물론 간결함 같은 경우는 클래스가 굉장히 가벼우면 더 간결하다고 느낄 수 있지만 만 말이다. 아무튼 계속 설명하면.. 첫 번째 이유는 public class Test { private String name; private int age; private String content; private String subject; public Test(String name, int age..
프록시 패턴을 알기전에 프록시라는 단어를 알아야 할듯 싶다. 프록시는 대리라는 뜻을 가지고 있다. 그러면 뭔가 대신해주는 패턴이라는건데 무엇을 대신해준다는 걸까? 예를 들어, 복잡한 일이 있다고 가정하자. 또, 그 일은 혼자서 하기 힘들다고 가정하자. 그러면 그 일을 누군가가 대신해준다면... 일은 더 수월하게 끝낼 수 있을 지도 모른다. IT세상에서는 혼자서 처리하기 힘들다기 보다는 프록시라는 객체가 있기 때문에 더 수월하다는 느낌을 받는다. 즉, 프록시에 도움을 받는 그런 기분을 받는다. 프록시 패턴에는 총 3가지 종류의 패턴이 존재한다. 가상 프록시 패턴, 원격 프록시 패턴, 보호 프록시 패턴 여기서 우리가 알아볼 패턴은 가상 프록시 패턴이다. (물론, 원격이나 보호의 내용이 전혀 다르기 때문에 이..
이 패턴의 가장 큰 특징은 이름에서 부터 알 수 있듯이 싱글 + 톤으로 하나만 존재한다는걸 알 수 있다. 그런데... 프로그래밍상에서는 객체를 여러개 생성할 수 있다. new a, new a 이런식으로요. 근데 이러면 하나가 아니라 두개 이상이 되버리니까 싱글 톤이 아니겠죠? 뭐 당연한 말이겠지만... 사실 싱글톤이라는건 메모리상에 하나만 존재한다는 뜻입니다. 그러니까 객체를 생성하려고 시도하든 뭐하든 메모리상에 하나만 존재하면 싱글톤이라는 겁니다. 근데 문제는 메모리상에는 하나니까 만들어진 객체들은 서로 공유가 됩니다. 왜냐하면 같은 객체니까. 메모리상에 주소값도 똑같기 때문에 같은 객체라고 할 수 있습니다. 또, 이 패턴은 겉보기에는 굉장히 쉽군 할 수 있지만, 사실 까면 또 까보고 싶은 양파같은 매..
팩토리... 뜻은 공장... 그렇다는건 뭔가를 만든다는 거라고 할 수 있습니다. 그러면 무엇을 만드는 걸까요? 간단히 말하면 객체를 만드는 행위라고 할수 있습니다. 근데, 자바에서는 new라는 키워드를 바탕으로 객체를 생성하고 있습니다. 그러면 그냥 new만 사용하면 되지 않을까요? 물론 그렇게 만들어도 크게 상관은 없지만... new만 사용하게 되면 객체들이 따로 놀게 됩니다. 왜냐하면 A라는 클래스를 생성하고 또 B라는 클래스를 생성한다고 가정하죠. 이 둘이 연관관계가 있다는 걸 알리기 위해서는 A a; 이런식으로 인스턴스로 만들거나 이 인스턴스를 매개변수화 시키던가. 아니면 상속을 받아야 될겁니다. 만약, A와 B의 상하 관계가 없는 거라면 어떨까요? 상속은 사용할 수 없습니다. 그러면 우리가 선택..
데이코레이터는 장식입니다. 지금 보고 있는 사진은 거북이 장식입니다. 예쁘죠? 물론 프로그래밍 상에서의 데코레이터는 살짝 다른 느낌이 들긴 하지만요. 아무튼 이름 만 봐서는 데코레이터는 무언가를 꾸미는 패턴이라고 생각하게 될것 같습니다. 막상 코드를 보면 이게 왜? 데코레이터지?라는 생각이 들지도 모릅니다. 보통 장식이라는게 정해진 위치에 놓잖아요. 커튼에 달린 장식품을 냉장고에 올려놓으면 이상한거처럼 이 패턴도 막 사용하면 안됩니다. 물론, 커튼 장식품을 냉장고에 가져다 놔도 아무상관은 없습니다. 아무리 멋있는 장식품이어도 아무데나 놓으면 그저 잡동사니에 불과하니까요. 이 처럼 데코레이터 패턴은 아무렇게나 사용이 가능은 하지만, 쓸데 없이 아무렇게나 사용하면 아무 쓸데 없는 패턴일 겁니다. 데코레이터 ..