목록Programing & Coding/Design Pattern (14)
S E P H ' S
프로토타입 패턴은 객체를 생성하는 데 시간과 노력이 많이 들고, 이미 유사한 객체가 존재하는 경우에 사용된다. 그리고 java의 clone()을 이용하기 때문에 생성하고자 하는 객체에 clone에 대한 Override를 요구한다. 이때 주의할 점은 반드시 생성하고자 하는 객체의 클래스에서 clone()이 정의되어야 한다는 것이다. 예를 들어 DB로부터 데이터를 가져오는 객체가 존재한다고 가정해보자. 만약 DB로부터 가져온 데이터를 우리의 프로그램에서 수차례 수정을 해야하는 요구사항이 있는 경우, 매번 new 라는 키워드를 통해 객체를 생성하여 DB로부터 항상 모든 데이터를 가져오는 것은 좋은 아이디어가 아니다. DB로 접근해서 데이터를 가져오는 행위는 비용이 크기 때문이다. 따라서 한 번 DB에 접근하여..
빌더(Builder) 패턴 빌더 패턴은 많은 Optional한 멤버 변수(혹은 파라미터)나 지속성 없는 상태 값들에 대해 처리해야 하는 문제들을 해결한다. 예를 들어, 추상 팩토리 패턴이나 팩토리 패턴에서는 생성해야 하는 클래스에 대한 속성 값이 많을 때 아래와 같은 이슈가 있다. 클라이언트 프로그램으로부터 팩토리 클래스로 많은 파라미터를 넘겨줄 때 타입, 순서 등에 대한 관리가 어려워져 에러 발생 확률이 높아짐 경우에 따라 필요 없는 파라미터들에 대해 팩토리 클래스에 일일이 null 값을 넘겨 줘야 한다. 생성해야 하는 서브 클래스가 무거워 지고 복잡해짐에 따라 팩토리 클래스 또한 복잡해진다. 빌더 패턴은 이러한 문제들을 해결하기 위해 별도의 Builder 클래스를 만들어 필수 값에 대해서는 생성자를 ..
추상 팩토리(Abstract Factory) 패턴 팩토리 메소드 패턴에서는 하나의 팩토리 클래스가 인풋으로 들어오는 값에 따라 if-else, switch문을 사용하여 다양한 서브 클래스를 리턴하는 식으로 구현했다. 추상 팩토리 패턴에서는 팩토리 클래스에서 서브 클래스를 생성하는 데 있어 if-else 문을 걷어낸다. 추상 팩토리 패턴은 인풋으로 서브 클래스에 대한 식별 데이터를 받는 것이 아닌 또 하나의 팩토리 클래스를 받는다. Super Class public abstract class Computer { public abstract String getRAM(); public abstract String getHDD(); public abstract String getCPU(); @Override p..
팩토리(Factory) 패턴 팩토리 패턴은 객체를 생성하는 인터페이스는 미리 정의하되 인스턴스를 만들 클래스의 결정은 서브클래스에서 내리는 패턴이다. 다시 말해 여러 개의 서브 클래스를 가진 슈퍼 클래스가 있을 때 인풋에 따라 하나의 자식 클래스의 인스턴스를 리턴해주는 방식이다. 팩토리 패턴에서는 클래스의 인스턴스를 만드는 시점을 서브 클래스로 미룬다. 이 패턴은 인스턴스화에 대한 책임을 객체를 사용하는 클라이언트에서 팩토리 클래스로 가져온다. 언제 사용하는가? 어떤 클래스가 자신이 생성해야 하는 객체의 클래스를 예측할 수 없을 때 생성할 객체를 기술하는 책임을 자신의 서브 클래스가 지정했으면 할 때 팩토리 패턴에 사용되는 슈퍼 클래스는 인터페이스나 추상 클래스, 혹은 평범한 자바 클래스여도 상관없다. ..