위의 코드는 싱글톤 패턴을 적용한 DatabaseConnector 클래스이다.1\. 멀티 쓰레드 환경에서도 싱글톤을 보장할까?멀티쓰레드 환경에서 getInstance()으로 2개의 객체가 생성될 수 있기에 클래스 단위의 동기화가 필요하다.2\. Reflection At
팩토리 패턴은 SOLID 원칙을 지키기 위해 느슨한 결합을 위한 OOP 디자인 패턴이다.코드 내에서 new 키워드를 사용했다는 의미는 인터페이스가 아닌 구상 클래스를 의존한다는 의미이다. (SOLID 위반) 별도의 클래스에서 클래스를 인스턴스화 할 수 있는데 이를 팩토
클래스의 필드가 많을 경우, 생성자를 통해 인스턴스를 생성하는 메서드를 사용하기란 쉽지 않다.(각 파라미터의 위치가 정해져 있어서 사용하기 어렵다.)멀티 쓰레드의 경우 하나의 객체를 여러 쓰레드가 조작할 위험이 있다.(기본 생성자를 사용해 인스턴스를 만들고 setter
프로토 타입 패턴은 생성된 객체가 자기 자신을 새롭게 복제하는 패턴을 의미한다.만약 객체를 생성하고 동등한 객체를 외부에서 생성하려고 하면 불필요한 의존성이 생길 수 있다.그렇기 때문에 인스턴스에게 자신을 복사하는 능력(메서드)를 주는 것을 프로토타입 패턴 이라고 한다
전략패턴은 상속 (extends) 보다 구성(class fleid)에 의존한다. 상속은 단일 클래스만 확장할 수 있고, 컴파일 타임에 타입이 지정되므로 정적이다. 이와 반대로 구성은 관계로 이루어져 있고 런타임에 동작을 변경할 수 있어 유연하다는 장점을 가지고 있다.
옵저버 패턴은 일 대 다 관계의 의존성 일 때 정의한다.subject : 관찰되어지는 object (일) / 버튼observers : subject에 의존적인 리스너들 (다)subject가 변경되면 의존하고 있는 모든 리스너들의 상태가 자동으로 변경되거나 업데이트 된다
명령, 수신자, 호출자로 구성된다.우선 제일 만만한 수신자 Light 이다. receiver는 command의 구현체를 구현할 때 필요한 클래스이다. command 클래스와 그 구현체(Concrete command) 이다.커맨드는 실행될 기능에 대한 인터페이스이다.호출
애플리케이션에 서로 비슷한 프로시져가 있다면 상속을 통해 특정한 개별화된 단계를 재정의하는 게 좋다.전략 패턴과 비슷하지만 템플릿 패턴은 상속(정적)을 이용하고, 전략패턴은 구성(동적)을 이용한다.상속은 클래스 수준에서 정의되고, 구성은 객체 수준에서 정의됨숫자를 정렬
NPE 를 피하기 위한 디자인 패턴결론적으로 Customer 객체를 추상화해 isNull() 메서드를 사용하게 된다.CustomerFactory 를 거쳐 customer를 가져와 NPE를 피할 수 있다.
방문자 패턴은 알고리즘이 작동하는 객체 구조에서 알고리즘을 분리하는 방법방문자와 방문 공간을 분리해 방문 공간이 방문자를 맞이할 때 이후의 로직은 방문자에게 모두 위임하는 패턴이다. 방문공간 ShoppingItem 인터페이스와 구현체방문자 ShoppingCartVisi
데코레이터 패턴은 동적으로 행동을 추기하기 위한 패턴이다.상속은 정적이기에 구성으로 구현된다.PlainBeverage 와 BeverageDecoration 구현체 모두 Beverage 인터페이스를 구현했다.
외부 라이브러리를 가져와 쓸 때 용도에 맞게 조리하기 위해 한 단계 클래스로 감싸는 패턴이다.퍼사드 패턴은 복잡한 프레임워크나 시스템을 필요한 부분만 간단한 인터페이스로 정의해 사용하게 용이하게끔 한다.