싱글톤(Singleton)패턴: 생성패턴 인스턴스가 오직 하나만 생성되는 것을 보장하고 어디서든 동일한 인스턴스에 접근할 수 있도록 하는 디자인 패턴 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용하게 되고, 또 프로그램이 예상치 못한 결과를 낳을 수 있다. 싱글턴 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용한다. 여러 문제가 있기 때문에 주로 공유하는 경우에 사용한다. 그냥 static 키워드를 붙여 전역상태로 만들어 사용하면 되지 않나요?? 싱글톤 패턴은 클래스 자신이 자기의 인스턴스에 접근하는 방법을 따로 관리하므로 static 키워드를 붙여 따로 전역변수를 생성하는 것보다 좋은 방법이다. 자기 자신의 생성자를 pri..
프로토타입(Prototype) 패턴: 생성패턴 원본 객체를 새로운 객체에 복사하여 필요에 따라 수정하는 메커니즘을 제공한다. 프로토타입패턴은 객체를 생성하는데 비용(시간, 자원)이 많이 들고, 비슷한 객체가 이미 있는 경우에 사용되는 생성 패턴 중 하나이다. 보통 DB에서 데이터를 읽어와 인스턴스를 생성할 때나 요청을 보내서 가져온 데이터로 인스턴스를 만들어야 하는 경우 오래시간과 큰 리소스가 필요하다. 때문에 데이터를 복제해서 새로운 인스턴스를 만들고 원하는 값만 일부 변경하여 사용한다. 프로토타입패턴은 복사를 위해 자바에서 제공하는 clone메소드를 사용할 수 있다. 자바에서 제공하는 clone메소드를 사용하기 때문에 생성하고자 하는 객체에 clone에 대한 Override를 요구한다. 이때, 주의할..
빌더(Builder) 패턴: 생성패턴 복잡한 객체를 생성하는 클래스와 표현하는 클래스를 분리하여, 동일한 절차에서도 서로 다른 표현을 생성하는 방법을 제공한다. Builder: 객체를 생성하는 데 사용되는 인터페이스 ConcreateBuilder: Builder를 실제로 구현하여 객체를 생성까지 하는 구현 클래스 Director: Builder를 인자로 받아 디테일한 객체를 생성하고 반환해주는 클래스 이 패턴을 사용하면, 동일한 구성코드를 사용하여 다양한 타입과 표현을 제공한다. 결과적으로 생성자를 가독성 좋게 만들어 주는 도구라고 할 수 있다. 생성자나 정적 팩터리가 처리해야 할 매개변수가 많다면 빌더 패턴을 선택하는 것이 더 낫다. 왜 빌더패턴이 필요한가요? 학생이라는 객체가 있다고 해보자. 학생 객..
추상 팩토리(Abstract Method) 패턴 : 생성패턴 서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이들 팩토리를 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴 팩토리 메서드와 유사하지만, 큰 차이점은 추상 팩토리는 연관된 객체들을 모은다는 것에 있다. 팩토리 패턴은 하나의 객체를 생성하는 데 사용되지만, 추상 팩토리 패턴은 팩토리 객체가 아닌 다른 객체 내부에 구현되어 해당 객체에서 여러 타입의 객체를 생성한다. AbstractFactory: 실제 팩토리 클래스의 공통 인터페이스 ConcreteFactory: 구체적인 팩토리 클래스로 AbstractFactory 클래스의 추상 메서드를 오버라이드함으로써 구체적인 제품을 생성한다. AbstractProduc..
팩토리 메서드(Factory Method) 패턴 : 생성패턴 객체를 생성할 때 어떤 클래스의 인스턴스를 만들 지 서브 클래스에서 결정하게 한다. 상속을 통해 기능을 확장하게 하는 패턴이다. 슈퍼 클래스 코드에서는 서브클래스에서 구현할 메소드를 호출해서 필요한 타입의 오브젝트를 가져와 사용한다. 이 메소드는 주로 인터페이스 타입으로 오브젝트를 리턴하므로 서브 클래스에서 정확히 어떤 클래스의 오브젝트를 만들어 리턴할지는 슈퍼클래스에서는 알지 못한다. 이렇게 서브 클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드를 팩토리 메소드라고 하고, 이 방식을 통해 오브젝트 생성 방법을 나머지 로직, 즉 슈퍼클래스의 기본 코드에서 독립시키는 방법을 팩토리 메소드 패턴이라고 한다. Creat..
* 주관적인 생각이 포함된 포스팅입니다. 디자인 패턴 객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴. 유지보수와 확장이 쉬운 설계를 할 때 주로 SOLID 법칙을 적용해야 한다고 들한다. 내가 알기론 디자인 패턴은 이 SOLID 원칙은 준수하여 제시된 설계 패턴인 것으로 알고 있다. SOLID 원칙이 도구라면 디자인 패턴은 결과물인 셈? SOLID 원칙을 되새기며 설계할 필요 없이 디자인 패턴을 적용하면 된다는 것! 디자인 패턴은 패턴 카탈로그에서 제시한 생성, 행동, 구조라는 3가지로 용도에 따라 분류가 가능하다. 생성패턴: 객체 인스턴스를 생성하는 패턴으로, 클라이언트와 그 클라이언트가 생성해야 하는 객체 인스턴스 사이의 연결을 끊어주는 패턴 행동패턴: 클래스와..
템플릿 메소드(Template Method) 패턴 : 행동패턴 상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법. 변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장할 기능은 서브클래스에서 만들도록 한다. 평소에도 사용하던 방법이었는데, 이게 패턴이었다고..? 슈퍼 클래스에 기본적인 로직의 흐름을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 prtected 메소드 등으로 만든 뒤 서브 클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하는 방법이다. -토비의 스프링에서- 예제를 확인해보면 단번에 이해가 될 것이다. Car 클래스 public abstract class Car { // 선택적으로 오버라이드 가능한 훅 메소드 protected void star..