[Design Pattern] 팩토리 패턴
·
Design Pattern
이번 포스팅으로 알아볼 디자인 패턴은 팩토리 패턴이다. 설명하기에 앞서 팩토리 패턴에 관하여 간단하게 설명하자면 공통된 종류를 갖는 객체들의 구현을 몰라도 팩토리 패턴을 통해 쉽게 생성하는 것을 말한다. 그렇다면 본격적으로 코드와 함께 알아보자. DB 클래스들과 함께 팩토리 패턴에 접근하려 한다. DIP(의존성 역전 원칙)에 의거하여 DB 인터페이스와 MariaDB, OracleDB를 생성해보자. DB public interface DB { public int execute(String sql); public void setUrl(String url); } MariaDB public class MariaDB implements DB { private String url; // 쿼리 실행 메서드 publi..
[Design Pattern] 데코레이터 패턴
·
Design Pattern
이번 포스팅 할 디자인 패턴은 데코레이터 패턴이다. 데코레이터는 말 그대로 장식하는 것이다. A, B, C 클래스가 있을 때 A -> B(A) -> C(B(A)) 이런식으로 장식해나갈 수 있는 패턴 또는 구조를 만드는 것을 데코레이터 패턴이라고 한다. 데코레이터 패턴을 사용하면 상속으로 복잡하고 중복된 코드를 만드는 것이 아니라 전략 패턴과 연계되어 좀 더 활용도 높은 구조를 만들 수 있다. 코드로 한 번 알아보자. 코드 구성 의존성 역전 원칙을 위한 Notifier 인터페이스 Notifier public interface Notifier { void send(); } BasicNotifier // 래퍼가 없는 데코레이터 // 이 클래스가 있어야 마무리 됨 public class BasicNotifier..
[Design Pattern] 탬플릿 메서드 패턴
·
Design Pattern
이번 포스팅에서는 디자인 패턴 중 하나인 템플릿 메서드 패턴에 관해 알아본다. 우선, 템플릿 메서드 패턴을 알아보기 위해 App, Teacher 클래스를 생성한다. Teacher public class Teacher { private void 입장하기(){ System.out.println("입장하기"); } private void 출석부르기(){ System.out.println("출석부르기"); } private void 퇴장하기(){ System.out.println("퇴장하기"); } public void 수업시작(){ 입장하기(); 출석부르기(); 퇴장하기(); } } App.java public class App { public static void main(String[] args) { Te..
[Design Pattern] 싱글톤 패턴
·
Design Pattern
우리가 지금껏 문지기 객체를 여러개 생성할 수 있었다. 하지만, 우리가 이번에 알아볼 싱글톤 패턴을 사용하면 문지기 객체를 한개밖에 사용하지 못한다. 그렇다면 싱글톤 패턴의 장점이 뭘까? 싱글톤 패턴의 장점 싱글톤 패턴의 사용시 장점은 다음과 같다. 메모리 절약 싱글톤 패턴은 전체 시스템에서 단 하나의 인스턴스만을 생성한다. 따라서, 동일한 리소스나 서비스에 대해 여러 인스턴스를 생성할 필요가 없다. 공유 리소스 접근 용이 싱글톤 리소스는 전역적으로 접근이 가능하다. 따라서, 다양한 부분에서 손쉽게 해당 인스턴스를 공유하고 접근할 수 있다. 인스턴스 제어 생성자가 private으로 설정되어 있다. 따라서, 인스턴스 생성을 엄격하게 제어하여 인스턴스가 무분별하게 생성되는 것을 방지한다. 데이터 일관성 싱글..
[Design Pattern] 어댑터 패턴
·
Design Pattern
이번에 다뤄볼 디자인 패턴은 어댑터 패턴이다. 어댑터 패턴을 사용해볼만한 경우는 크게 두 가지이다. 외부 요소를 기존 시스템에 재사용하고 싶지만 아직 만들어지지 않은 경우 외부 요소를 기존 시스템에 재사용하고 싶지만 호환되지 않은 경우 이렇게 두 경우에 사용할만하다. 또한, 레거시 코드에서도 활용이 가능하다. 코드와 함께 알아보자. OuterTiger // 예전에 만들어진 레거시 코드 or 외부에서 만든 라이브러리 // OuterTiger 코드를 수정하면 OCP 원칙 위반 public class OuterTiger { private String fullName = "호랑이"; public String getFullName() { return fullName; } } OuterTiger라는 레거시 코드 또..
[Design Pattern] 프록시 패턴
·
Design Pattern
이번 포스팅은 디자인 패턴 중 하나인 프록시 패턴에 대해 알아본다. 코드와 상황은 전략 패턴에서 사용했던 코드와 상황을 가져간다. 만약 문지기가 동물들을 쫓아내기 전에 무엇인가 할 행동이 추가되었다고 생각해보자. 그렇다면 코드는 다음과 같이 작성할 수 있을 것이다. DoorMan public class DoorMan { public void 쫓아내(Animal a){ System.out.println("안녕 ㅎㅎ"); System.out.println(a.getName() + " 쫓아내"); } } 할 행동이 잘 출력되는 것을 확인할 수 있다. 하지만, 이는 SOLID 원칙의 O(OCP - 개방 페쇄 원칙)에 위배된다. 당연하다. 기존에 있던 DoorMan을 수정했기 때문이다. 그렇기에 SOLID 원칙에..