싱글톤 디자인 패턴 오랜만에 기억을 되살릴 겸 다시 정리하지만 이 방법에는 문제가 있다. 그건 바로 멀티스레드(multi-threaded)환경에서는 초기에 실행되던 복수의 스레드들이 서로 다른 객체를 얻게 될 수 있다. 물론 한번 객체가 세팅된 이후로는 어떤 스레드든
팩토리 패턴의 가장 간단한 구현은 이렇게 메인 로직에서 사용할 특정 객체를 팩토리 클래스를 사용해서 생성해서 사용하는 것이다. 하지만 이렇게 되면 만들어야할 객체의 종류가 늘어날수록 팩토리 클래스 안의 로직이 복잡해진다는 단점이 있다. 이런 식으로 특정 종류(들)의 인
빌더 패턴은 생성자에 인자가 많은 경우에 사용하기에 좋은 패턴으로1) 생성자에 들어가는 각 값이 어느 필드에 설정되는지 코드로 직관적으로 표현하기에 좋고2) 특정 필드에 값을 설정하지 않는 경우에는 해당 필드에 대한 코드만 생략하면 되기 때문에 유연하게 코드를 쓸 수도
그냥 인스턴스 클로닝 하는 것 생각하면 됨하지만 Object의 clone 메소드는 shallow copy를 지원하기 때문에 deep copy를 구현하고 싶다면 별도의 작업이 필요함장점 (1) 복잡한 객체를 만드는 과정을 또 다시 반복하지 않아도 된다.(2) shallo
Client측 코드와 Service Provider측 코드를 내가 둘 중 하나도 수정할 수 없는 경우에는 마치 미국 여행가면 110v 돼지코에 나의 220v 플러그를 꼽기 위해 다이소에서 어댑터를 사서 사용하듯이, 중간 매개 역할을 해주는 어댑터 클래스를 정의하
런타임에 어떤 것의 동작을 바꿀 수 있음, 기존 코드의 기능을 런타임에 확장다양한 경우에 상속을 사용해서 무수히 많은 클래스를 만들지 말고 뭔가 wrapper 클래스를 만들어서 해당 기능을 감싸고 대신 외부적으로는 원래의 기능과 같은 인터페이스를 드러내는 기법이런 식으
퍼사드(Farcade)란 건물의 입구 쪽 정면을 의미하는데 복잡한 라이브러리나 프레임워크에 대한 의존성을 간단한 인터페이스로 추상화하는 것복잡한 모든 디테일은 퍼사드 안에 숨기는 것
인스턴스를 너무 많이 생성하면 메모리가 부족해지고 성능이 안 좋아질 수 있다. 플라이웨이트 패턴은 객체를 간단하게 만드는 패턴인데자주 바뀌는 속성과 그렇지 않은 속성들을 구분하여 자주 바뀌는 속성만 추려내어 별도의 immutable한 객체로 만들어 해당 속성을 가지는
네트워크 상의 프록시 서버를 생각하면 된다..! 특정 객체를 사용할 때 항상 프록시 객체를 거치게 함으로써 로깅, 캐싱, 접근 제어나, 초기화 지연 등에 사용된다.
각각의 책임을 하나의 체인 고리로 만들고 이것들을 연결해서 하나의 체인으로 만들어서 일처리르 하는 것,순차적으로 여러 일을 처리해야할 때 쓰면 유용하다. 특정 인풋은 모든 체인 고리를 거쳐갈 수도 있고어떤 인풋은 중간에 이탈할 수도 있다. 그런데 이 패턴은 체인을 쫓아
어떤 명령의 호출자(invoker)와 수신자(receiver)를 분리하여 커맨드라는 별도 객체를 만들어서 통신하는 것, 여러 종류의 커맨드 클래스를 만들어서 다양한 명령을 전달하는 패턴이다. 이렇게 하게되면 invoker와 receiver의 코드는 수정되지 않는다.Ja
객체 내부의 상태를 캡슐화를 유지하면서도 외부에 저장해두는 패턴 게임 종료 후 다시 시작 시에 해당 환경이 그대로 복원되는 것을 떠올리면 된다 객체의 상태를 갖고 있는 별도의 메멘토 객체를 만듦으로써 Client가 사용하는 서비스의 구체적인 상태를 모르고도 상태 저장/
폴링 메커니즘을 없애고 효율적으로 데이터가 있을 때만 데이터가 흘러들어가는 Pub/Sub 패턴을 구현할 수 있게 해주는 디자인 패턴이다. 특정 Subject를 subscribe하고 있는 Observer들에게 notify를 하는 방식옵저버는 대신 사용이 다 되고 나면 s
디자인 패턴 중 가장 유명한 것들 중 하나로 어떤 일을 수행하는 로직의 종류가 다양할 때 해당 공통 인터페이스를 만들고 사용하는 입장에서는 인터페이스만 신경쓰면 되고, 그 로직 구현체는 신경쓰지 않아도되는 패턴흔히 말하는 상속 대신 합성하라는 말의 전형인 패턴이다.
말 그대로 템플릿을 제공하는 패턴이다. 부모 클래스(보통 추상 클래스)에서 각 작업에 대한 전반적인 로직의 알고리즘을 나타내고각 자식 클래스에 각 로직들에 대해서는 구체적인 커스텀 로직을 구현하는 패턴이다. 여러 자식 클래스들의 전반적인 로직의 알고리즘이 대부분 비슷한