오랜만에 작성하는 것 같다. 프록시 이후로 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의 상하 관계가 없는 거라면 어떨까요? 상속은 사용할 수 없습니다. 그러면 우리가 선택..
데이코레이터는 장식입니다. 지금 보고 있는 사진은 거북이 장식입니다. 예쁘죠? 물론 프로그래밍 상에서의 데코레이터는 살짝 다른 느낌이 들긴 하지만요. 아무튼 이름 만 봐서는 데코레이터는 무언가를 꾸미는 패턴이라고 생각하게 될것 같습니다. 막상 코드를 보면 이게 왜? 데코레이터지?라는 생각이 들지도 모릅니다. 보통 장식이라는게 정해진 위치에 놓잖아요. 커튼에 달린 장식품을 냉장고에 올려놓으면 이상한거처럼 이 패턴도 막 사용하면 안됩니다. 물론, 커튼 장식품을 냉장고에 가져다 놔도 아무상관은 없습니다. 아무리 멋있는 장식품이어도 아무데나 놓으면 그저 잡동사니에 불과하니까요. 이 처럼 데코레이터 패턴은 아무렇게나 사용이 가능은 하지만, 쓸데 없이 아무렇게나 사용하면 아무 쓸데 없는 패턴일 겁니다. 데코레이터 ..
오늘은 다른 방식으로 이 패턴을 이해하려고합니다. 이 패턴은 생각보다 구현이 단순하기 때문에 이해하는데 오히려 걸림돌이 되는 그런 패턴인것 같습니다. 그럼에도 그냥 한번 해보겠습니다. 오늘은 제가 직접 예제를 만들지 않고 유튜버 이야기'sG님의 코드를 분석하는 시간을 가져볼까합니다. 컴포짓트? 이건 과연 뭘까요? 컴포짓트는 한글로 혼합물이라는 뜻이라고 합니다. 혼합물의 가장 큰 특징은 2개 이상의 액체를 섞었다는 것이 그 특징입니다. 액체를 섞게되면 뭐가 섞였는지 잘 모릅니다. 하지만 저희는 액체를 섞고 싶은게 아닙니다. 저희가 섞고 싶은 건 객체입니다. 하지만 객체는 액체와 달리 섞는 방법이 정해져 있지 않습니다. 그래서 디자인 패턴에서 사용한 방법이 바로 트리로 만드는 것입니다. 물론, 자료구조의 트..
Observer 관측자라는 뜻으로 옵저버 패턴, 종속자 패턴, 게시-구독 패턴이라고 한다. 사실 이 패턴을 처음 접했을때는 단순히 난해하다고만 생각했다. 왜냐하면 옵저버 패턴의 가장 큰 특징중 하나가 객체의 느슨한 결합인데... 이것에 의미를 정확하게 인지하지 못하고 있었다. 정확하지는 않지만... 아마 직접 구현이아닌 인터페이스로 만들어서 결합도를 낮추는 방법인듯 싶다. 아무래도 인터페이스로 인스턴스를 만들게 되면 선택지가 많아지기 때문에 아마 맞는것 같다. 해드 퍼스트 디자인 패턴 책에서는 이 패턴을 설명할때, 신문과 구독이라는 주제로 설명했다. 신문사는 여러 종류가 있다. A 신문사, B신문사, C신문사... 등등 하지만 여기에서는 A신문사만 존재한다고 가정하자. 보통 신문사에는 구독자가 있다. 즉..
퍼사드? 그게 뭔데 패턴으로 붙여 놨을까? 이것 부터 알아야할듯 싶다. 완벽하게 일치는 안해도 퍼사드 하면 떠오르는 이미지가 있는게 좋지 않을까? 퍼사드는 건물의 정면을 말한다고 한다. 어떻게 보면 이름을 잘지은 패턴이라고 할 수도 있겠다. 퍼사드 패턴은 객체지향의 최소 지식 원칙을 준수한다고 한다. 최소 지식 원칙이라는게 무엇일까? 여기서 말하는 지식은 도대체 뭘까? 내가 생각할 때, 사람의 지식은 아닌것 같다는 느낌이 든다. 이게 무슨 말이냐면... 보통 지식은 많은 것을 아는 것을 뜻한다. 하지만 객체지향의 지식은 조금 다르게 해석 되는것 같다. 바로 클래스의 연결로 결정된다. 이게 무슨 말이냐면 A,B클래스가 있다고 가정하자. 또, A클래스는 B클래스와 연결이 되어있다. 이 정도가 최소 지식 원칙..
브릿지 패턴..... 이것도 어뎁터와 마찬가지로 떠오르는 이미지가 있을거다. 바로 이런 다리 이미지를 떠올릴 것이다. 물론 동물의 다리를 떠올리는 분도 있겠지만 말이다. 근데.. 나는 잘 모르겠다. 왜 이름이 브릿지인지에 대해 전혀 감이 잡히지 않고 있다. 어째든 브릿지 패턴의 가장 큰 특징은 구현과 기능을 분리한다는 점에 있다. 이걸 따로 공부했을때는 아 그렇구나 라고 느꼈는데, 구현과 기능을 합쳐서 내가 아는 구현이 맞는 구현인가라는 착각이 들기도 한다. 결론부터 말하면 내가 생각한 구현이 맞다. 다만, 기능을 분리한다는데 구현에는 뭐가 들어있는 걸까? 구현을 하면 당연히 구현안에도 기능이 있을 텐데.... 왜 이걸 구현과 기능의 분리라 한것일까? 사실 분리하는 기능은 기본 기능은 제외된거였다. 예를..
어댑터라고 하면 제일 먼저 생각나는 건 대충 이런 이미지를 생각한다. 그럼 어댑터라는건 어떤 역할을 하는 걸까? 일상생활에서의 어댑터는 전기를 변환하는데 사용이 된다. 가령, 소켓(플러그를 꼽는 곳)은 220V를 사용되는데, 사용하는 전자기기가 사용하는 V는 110V를 사용한다고 한다. 이 두개가 호환성이 맞지않기 때문에 전력은 들어오지 않는다. 이때 필요한것이 바로 어댑터다. 어댑터를 이용하면 220V라는 전력을 110V로 바꿔준다. 어떻게 보면 컨버터랑 비슷하지만.. 뭐 이건 전기 수업이 아니므로 넘어가도록 하자. 또, 내가 전기를 잘 아는게 아니기 때문에 틀리게 말할 수 도 있다. 하지만 하나 확실한건 호환되지 않는 두 장치를 연결시켜준다는 점은 변함이 없다. 즉, 두개가 호환이 되게 해주는 역할을..