개발 도서

프록시 패턴 특정 객체로의 접근을 제어하는 대리인(특정 객체를 대변하는 객체)을 제공합니다. 즉, 진짜 객체를 보호하기위해 가짜 객체를 노출하여 진짜 객체의 보안을 강화하는 패턴입니다. 특징 클라이언트가 실제 객체에 직접 접근하는 것을 제어할 수 있습니다. 필요한 시점에 실제 객체를 생성하거나 초기화하는 등의 지연 로딩을 구현할 수 있습니다. 장점 객체에 대한 직접적인 접근을 제한하고 특정 권한이나 보안을 강화할 수 있습니다. 필요한 경우에만 객체를 생성하고 초기화하여 자원을 효율적으로 활용할 수 있습니다. 단점 코드의 구조가 더 복잡해질 수 있습니다. 지연 로딩으로 인해 성능 저하가 될 수 있다. 지연 로딩을 위해 로딩이 필요한 순간까지 프록시를 유지해야 하므로 추가적인 메모리 사용량이 발생할 수 있고..
컴포지트 패턴 객체를 트리구조로 구성해서 부분-전체 계층구조를 구현합니다.컴포지트 패턴을 사용하면 클라이언트에서 개별 객체와 복합 객체를 똑같은 방법으로 다룰 수 있습니다. 즉, 단일객체와 집합객체를 하나의 동일한 방법으로 처리하기 위한 패턴입니다. 특징 컴포지트 패턴은 객체들을 부분-전체 계층 구조로 구성합니다. 새로운 객체를 추가하거나 구조를 변경해도 클라이언트 코드를 수정할 필요가 없습니다. 복합 객체와 개별 객체를 대상으로 똑같은 작업을 적용할 수 있어 구분할 필요가 없어진다. 장점 일관성 있는 인터페이스를 제공합니다. 시스템이 유연하고 확장 가능합니다. 단점 특정한 복합 객체에 특화된 메서드를 호출하기 어려울 수 있습니다. 일부 상황에서는 설계가 복잡해질 수 있습니다. ex) 실제로 구분하여 처..
반복자 패턴 컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법을 제공합니다. (여기서 말하는 집합체란 동일한 형태의 데이터 항목을 여러개 가지고 있는 것을 말합니다.) 즉, 반복자 패턴은 집합체를 쉽게 순회하고 접근할 수 있도록 하는 디자인 패턴입니다. 특징 집합체의 구현을 외부에 노출하지 않고, 반복에 필요한 인터페이스만을 제공하여 캡슐화를 강화합니다. 장점 유연성과 확장성 : 집합체의 구조를 바꾸거나, 새로운 집합체를 추가해도 클라이언트 코드에 영향을 주지 않으면서 반복 동작을 구현할 수 있습니다. 단일 책임의 원칙 : 집합체의 관리와 반복에 대한 책임이 분리되어 각각 단일 책임의 원칙을 지킬 수 있습니다. 단점 간단한 집합체에 비효율적 : 작은 규모의 경우에는 반복자 패..
템플릿 메소드 알고리즘의 골격을 정의합니다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있습니다. 즉, 알고리즘의 틀을 만들어 놓고, 세부 사항은 서브클래스에서 채워 넣을 수 있게 하는 디자인 방식입니다. 장점 재사용성 : 공통 알고리즘을 부모 클래스에 정의하여 여러 하위 클래스에서 재사용이 가능하다. 유연성 : 알고리즘 일부를 서브클래스로 미루어 쉬운 변경과 확장이 가능합니다. 단점 클래스 수의 증가 : 각 단계별로 서브클래스가 필요하여 복잡해질 수 있습니다. 변경 어려움 : 부모 클래스의 알고리즘 변경이 모든 서브클래스에 영향을 끼쳐 유지보수가 어려워질 수 있습니다. 템플릿 ..
어댑터 패턴 특정 클래스 인터페이스를 요구하는 다른 인터페이스로 변환합니다. 인터페이스가 호환되지 않아 같이 쓸 수 없던 클래스를 사용할 수 있게 도와줍니다. 즉, 호환성 문제를 해결해줍니다. 구조 어댑터 패턴에는 두 종류가 있습니다. 하나는 객체 어댑터, 다른 하나는 클래스 어댑터 입니다. 클래스 어댑터 패턴은 어댑터와 어댑티가 타겟 클래스를 동시에 상속받아 구현하므로 다중 상속을 지원하는 언어에서 사용할 수 있습니다. 객체 어댑터 패턴은 구성을 통해 더 유연하게 적용할 수 있으며 자바같은 다중 상속을 지원하지 않는 언어에서는 주로 사용합니다. 또한 클래스 간의 느슨한 결합으로 더 좋은 유지보수성을 얻을 수 있습니다. 가장 큰 차이점은 클래스 어댑터는 상속을 사용하고, 객체 어댑터는 구성을 사용합니다...
커맨드 패턴 요청 내역을 객체로 캡슐화 해서 객체를 서로 다른 요청 내역에 따라 매개변수화할 수 있습니다. 이러면 요청을 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있습니다. 즉, 요청하는 객체와 요챙을 수행하는 객체를 분리할 수 있습니다. 저는 여러 명령들을 추상화해서 클래스로 정의하고 객체로 만들어서 사용하는 패턴이라고 말할 수 있을 거 같습니다. 커맨드 패턴의 구조 Command (명령)은 작업을 수행하는 인터페이스 ConcreteCommand (구체적 명령)는 실제 작업을 구현한 클래스(예제에서의 DarkSightOnCommand, LuckySeven 등) Invoker (호출자)는 Command 객체를 실행하는 주체 (예제에서의 SkillUser) Receiver (수신자)는..
싱글톤 패턴 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공합니다. 클래스에서 하나뿐인 인스턴스를 관리하게 하여야 하고 다른 어떤 클래스에서도 자신의 인스턴스를 추가로 만들지 못하게 해야 하며 필요하다면 반드시 클래스 자신을 거치도록 해야 합니다. 어디서든 접근할 수 있도록 전역 접근 지점을 제공하고, 언제든 클래스에 요청할 수 있게 만들어 놓고, 요청이 들어오면 하나뿐인 인스턴스를 건네주도록 만들어야 한다. 싱글톤 패턴 구현 public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if(instance == null) in..
팩토리 패턴 객체를 생성할 때 필요한 인터페이스를 만들어서 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정합니다. 팩토리 메서드 패턴을 사용하면 클래스 인스턴스 만드는 일을 서브클래스에게 맡기게 됩니다. 즉, 객체를 만들기 위한 인터페이스를 제공하는 디자인 패턴입니다. 장점 구체적으로 생성할 클래스를 유연하게 정할 수 있다. 캡슐화와 추상화를 통해 구체적인 타입을 숨길 수 있다. 단점 새로운 객체를 추가하려면 팩토리 클래스를 만들어야 하기 때문에 확장성은 높지만 많은 변화가 필요하다. 클래스의 수와 코드의 양이 많아질 수 있다. 팩토리 메서드 패턴 사용 예제 Pasta인터페이스를 구현한3가지 파스타가 있고 PastaFactory라는 추상클래스를 만들고 그걸 구현한 3가지 파스타 팩도리가 있습니다. ..
백수왕
'개발 도서' 카테고리의 글 목록