본문 바로가기

기술면접/디자인 패턴4

[디자인 패턴] 커맨드 패턴 커맨드 패턴이란? 커맨드 패턴은 실행될 기능을 캡슐화하여 여러 기능이 가능하도록 재사용성이 높은 클래스 설계 패턴이다. 요청을 캡슐화해 호출자와 수신자를 분리하는 패턴 리모컨이 있어 버튼을 선택해야 한다고 가정해본다. 명령은 게임 관련 명령과 불 관련 명령이 있다. Invoker는 Button이 되고, Receiver는 Game, Light가 된다. Command 인터페이스를 선언해 캡슐화한다. public class Button { private Stack commands = new Stack(); public void press(Command command) { command.execute(); commands.push(command); } public void undo() { if(!commands.. 2022. 4. 5.
[디자인 패턴] 전략 패턴 전략 패턴이란? 다양한 전략을 바꿔가며 해결하는 패턴 인터페이스와 위임을 사용해 특정 기능 변경을 할 때 사용하는 패턴 위임으로 IOC(제어의 역전), 인터페이스로 OCP를 만족할 수 있다. 언제 쓰는가? 게임에서 무기를 선택할때 칼,창,도 등급 할인 정책 자바에서 쓰이는 경우 Collections#sort() javax.servlet.http.HttpServlet javax.servlet.Filter#doFilter() 장점 Context의 변경 없이 새 전략을 추가할 수 있다. 확장에 유리한 코드 작성 단점 클래스로 분리한 각 전략들이 어느 상황에 사용되는지 알아야 함. 구체 클래스에선 인터페이스에 있는 메서드를 쓰지 않을 수도 있기에 비효율적일 수 있다. 구현해보기 상황: PM, 개발자, 개발 도구.. 2022. 4. 5.
[디자인 패턴] 싱글톤 패턴 싱글톤 패턴이란 인스턴스를 오직 한 개만 제공하는 클래스이다. 시스템 런타임, 환경 세팅에 대한 정보 등, 인스턴스가 여러 개일때 문제가 생길 수 있다. 따라서 하나의 인스턴스만 만들어 제공하는 클래스를 만드는 것이 싱글톤 패턴이다. 싱글톤 패턴 구현법 1 - 싱글 스레드 생성자를 private로 만드는 이유 → new로 만들지 않기 위해서 getInstance()를 static으로 만든 이유 → 처음 만들어진 이후엔 null이 아니기 때문에 하나의 인스턴스만 리턴하게 된다. getInstance()가 멀티 쓰레드 환경에서 안전하지 않은 이유 1번, 2번 스레드가 있다. 1번 스레드가 처음 접근할때 null이기 때문에 new를 실행하게 된다. 그런데 거의 동시에 2번 스레드가 접근할때에도 new를 실행하.. 2022. 4. 1.
[디자인 패턴] 프록시 패턴이란? 프록시 패턴이란??? Proxy는 대리자라는 의미를 갖고 있다. 비서를 거쳐 사장과 커뮤니케이션하는 개념 객체 사용을 위해 직접 참조하지 않고, 해당 객체를 바라보는 객체를 생성해 실제 객체의 생성을 미룬다. 프록시 사용 이유는? 객체 지향의 원칙인 OCP(Open-Closed Principle)을 지키기 위해서이다. 자기 자신에 대한 수정에는 열려 있고 외부의 접근에 대해서는 닫혀 있어야 한다는 원칙 프록시 패턴의 장점 객체 생성 전에도 프록시를 통해 참조가 가능하다. 실제 객체의 public, protected를 숨길 수 있다.(인터페이스로 대체) 실제 객체에 대한 사전 처리가 가능하다. 프록시 패턴의 단점 자주 사용될 경우, 가짜 객체가 생성되는 것이기에 성능 저하가 발생할 수 있다. 로직이 복잡해.. 2022. 3. 22.