300x250
✍️ 어댑터 패턴, 패턴 소개 어댑터 패턴은 일상생활에서도 흔히 찾아볼 수 있는데, 220V 코드를 110V 콘센트에 꽂을 때 흔히 돼지코라고 불리는 어댑터를 사용해 본 경험이 있을 것이다. 바로 이 돼지코가 어댑터 패턴과 유사한 실생활 사례라고 할 수 있다. 이제 소프트웨어적 측면에서 어댑터 패턴을 설명하면, Client가 사용하는 Interface는 정해져있는데 내가 작성한 코드(Adaptee)는 해당 Interface를 따르지 않을 때 Client와 Adaptee 사이의 간극을 Adapter로 메꿔서 Adaptee를 재사용할 수 있도록 하는 패턴이다. 정리하면 '기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴이다.' 언제나 그렇듯... 말로는 너무 어렵다 코드를 보자. 🍊 어댑..
✍️ 프로토타입 패턴, Java에서 찾아보기 여기 Student를 담는 ArrayList가 있을 때, students를 복제를 하고 싶다면 ArrayList가 제공하는 clone 메서드를 호출할 수 있다. 하지만 이 방법은 자주 쓰이지 않는다. public static void main(String[] args) { Student kang = new Student("kang"); Student world = new Student("world"); ArrayList students = new ArrayList(); students.add(kang); students.add(world); ArrayList clones = (ArrayList) students.clone(); } @AllArgsConstruc..
✍️ 프로토타입, 정리 프로토타입 패턴을 간단하게 정리하자면, 기존의 인스턴스를 청사진 삼아 새로운 인스턴스를 생성하는 방법으로 Prototype interface는 clone 메서드를 추상화하고, 클래스는 이를 구현함으로써 복제된 인스턴스를 제공한다. Java의 경우 Cloneable interface를 구현하고 Object가 제공하는 clone 메서드를 재정의하면 기본적인 clone을 사용할 수 있고 이와 유사하게 C#은 Memberwiseclone을 제공한다. 이처럼 본인이 사용하는 언어가 기본적인 clone 메서드를 지원한다면 프로토타입 패턴에 활용할 수 있다. 🍊 프로토타입, 장단점 프로토타입 패턴의 장점으로 첫째로, 복잡한 객체를 만드는 과정을 숨길 수 있다. 둘째로. 기존 객체를 복제하는 과..
✍️ 프로토타입 패턴, 적용하기 이전까지의 디자인 패턴과 다르게, 프로토타입 패턴은 자바가 제공하는 clone을 사용해서 간단하게 구현할 수 있다. clone은 기본적으로 인스턴스의 얕은 복사를 제공하는 메서드로 최상위 클래스인 Object에 선언되어 있다. public class Object { ... protected native Object clone() throws CloneNotSupportedException; ... } 재밌게도 clone 메서드의 접근 제어자는 protected로, 아무 클래스나 clone을 제공하는 것이 아닌 명시적으로 clone이 가능하도록 만든 클래스만 clone을 외부에 제공할 수 있다. 앞서 말한 '명시적으로 clone이 가능하도록 하는 작업'이 바로 Cloneab..
✍️ 프로토타입 패턴, 패턴 소개 프로토타입 패턴은 기존 인스턴스를 복제해서 새로운 인스턴스를 만드는 패턴으로 일반적으로 기존 인스턴스를 응용해서 새로운 인스턴스를 생성할 때 유용하게 사용된다. 특히 인스턴스를 생성할 때 시간이 오래 걸리는 작업이, DB에서 어떤 값을 읽어온 다음 생성자에 넘겨주는, 선행돼야 한다면 인스턴스를 생성할 때마다 DB로부터 값을 읽어오고 인스턴스를 생성하는 작업은 많은 자원을 소모할 것이다. 대신에 한번 생성된 인스턴스의 모든 값을 복사해서 새로운 인스턴스를 만들고 원하는 값만 변경한다면 DB 접근 없이도 새로운 인스턴스를 구성할 수 있다. 프로토타입 패턴의 구조는 심플하다. Prototype 인터페이스는 복제를 추상화한 Clone 메서드를 포함하고, 복제 기능을 제공할 클래..
✍️ 빌더 패턴, Java에서 찾아보기 Java의 StringBuilder에서 빌더 패턴을 찾아볼 수 있다. 빌더에 해당하는 StringBuilder를 생성하고, 빌더가 제공하는 append 메서드로 인스턴스를 구성하고, 최종적으로 toString을 호출해서 String을 생성하는 일련의 과정이 빌더 패턴의 그것과 동일하다. public class StringBuilderExample { public static void main(String[] args) { StringBuilder stringBuilder = new StringBuilder(); String result = stringBuilder .append("hello ") .append("world!") .toString(); System.o..