개발은 재밌어야 한다
article thumbnail
[디자인패턴] 템플릿 메서드 패턴 (Template Method Pattern)

템플릿 메서드 패턴 볼트라고 하는 이름의 강아징와 키티라는 이름의 고양이를 키운다고 상상해보자. 볼트, 키티와 함께 재미있는 시간을 보내는 세계를 프로그래밍으로 표현한다면 다음과 같은 2개의 클래스가 필요 할 것입니다. Dog클래스와 Cat 클래스 안에 있는 playWithOwner() 메서드를 보면 서로 짖는 부분(멍멍, 야옹야옹)만 빼고는 모두 동일한 것을 볼 수 있다. 코드를 보고 있으면 객체 지향의 4대 특성 가운데 상속을 통해 동일한 부분(중복)은 상위 클래스로, 달라지는 부분만 하위 클래스로 분할하고 싶은 객체 지향 설계에 대한 욕구가 자극될 것입니다. 따라서 이 코드를 개선해보겠습니다. 상위 클래스인 Animal에는 템플릿(견본)을 제공하는 playWithOwner() 메서드와 하위 클래스에..

article thumbnail
[디자인패턴] 싱글턴 패턴(Singleton Pattern)

싱글턴 패턴이란 인스턴스를 하나만 만들어 사용하기 위한 패턴이다. 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용하게 되고, 프로그램이 예상치 못한 결과를 낳을 수 있다. 싱글턴 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용한다. 싱글턴 패턴을 적용할 경우 의미상 두 개의 객체가 존재할 수 없다. 이를 구현하려면 객체 생성을 위한 new에 제약을 걸어야 하고, 만들어진 단일 객체를 반환할 수 있는 메서드가 필요하다. 따라서 필요한 요소들이 3가지가 필요하다. new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정한다. 유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다. 유일한 단일 객체를 참조할 정적 ..

article thumbnail
[디자인패턴] 프록시패턴 (Proxy Pattern)

프록시(proxy)는 대리자, 대변인이라는 뜻을 가진 단어이다. 대리자/대변인이라고 하면 다른 누군가를 대신해 그 역할을 수행하는 존재를 말한다. 뉴스에는 항상 청와대 대변인, 백악관 대변인 등등 다양한 대변인이 등장한다. 디자인 패턴에서도 이렇게 대리자/대변인이 등장합니다. 우선 대리자를 사용하지 않고 직접 호출하는 코드를 보면 Service라는 클래스를 호출하는 ClientWithNoProxy라는 클래스는 대변인의 존재를 사용하지않은 즉, 프록시 패턴을 적용하지 않은 클래스이다. Service클래스에서 직접적으로 runSomething 메소드를 호출해서 서비스 호출!!! 이라는 결과를 보여준다. 그럼 프록시 패턴이 적용된 경우를 보면, 프록시 패턴의 경우 실제 서비스 객체가 가진 메서드와 같은 이름의..

article thumbnail
[디자인패턴] 어댑터 패턴(AdapterPattern)

AdapterPattern 어댑터를 생각해보면 흔히 사용하는 휴대폰 충전기의 어댑터를 생각해 볼 수 있다. 어댑터는 220V라는 콘센트에 서로 다른 종류의 충전기가 휴대폰과 전원 콘센트 사이에서 둘을 연결해주는 변환기의 역할을 수행해 준다. 데이터 베이스에서 다양한 데이터베이스 시스템을 공통의 인터페이스인 ODBC 또는 JDBC를 이용해서 조작할 수 있는데, ODBC/JDBC 가 어댑터 패턴을 사용해서 다양한 데이터베이스 시스템을 단일한 인터페이스로 조작할 수 있게 해주기 때문이다. 어댑터 패턴이 적용되지 않은 코드 ClientWithNoAdapter 클래스에서 main() 메서드를 보면 sa1 참조 변수와 sb1 참조 변수를 통해 호출하는 각 메서드가 비슷한 일을 하지만 메서드명이 다르다.(sa1은 r..

article thumbnail
[디자인 패턴] 빌더 패턴(Builder Pattern)

스프링 인 액션 5판 스터디를 진행하던 중에 스프링 시큐리티에서 빌더 패턴이 사용되는 부분을 보고 빌더 패턴에 대한 포스팅을 해보겠습니다. 빌더 패턴은 소프트 웨어 디자인 패턴 중에 하나로 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. 2 단어 요약 생성자 오버로딩 (위키백과- 빌더 패턴) 일단 무슨 소린지 잘 와닿지 않는다. 객체를 생성하는 방법이 여러 가지 있는데, 일반적으로 사용되는 방법은 1.생성자에 인자를 넣어 인스턴스를 생성하는 방법이나 2.setter를 이용하는 자바빈 패턴을 많이 사용합니다. 3. 빌더 패턴은 이런 패턴들에서의 단점을 좀 더 개선한 방법으로 사용되는 방법입니다. 예시로 피자라는 객체가 있다고 가정해보..