본문 바로가기

디자인 패턴

(11)
[디자인패턴 / JAVA] 프렌드 접근자 패턴 [디자인패턴 / JAVA] 프렌드 접근자 패턴 API 개발하다보면 모듈화와 접근제어자의 노출도를 두고 트레이드 오프하는경우가 있다. 예를들어, API패키지를 지원하는 NONE-API패키지가 있을때, API패키지에서 NONE-API패키지의 메소드에 접근하기 위해선 메소드를 "public"으로 설정해야한다. package test.api; public final class api{ private final NoneApi noneApi; { noneApi = new noneApi(); } public void hello(){ noneApi.hello(); } } package test.noneapi; public final class NoneApi{ public void hello(){ return "hell..
[디자인패턴] 스테이트 패턴 책을 공부하며 새로운 문제를 만들고 구현한것을 기록한 게시글입니다. (이해한 내용을 바탕으로 작성했기 때문에, 내용이 정확하지않고 틀린부분이 있을수있으며, 예시가 패턴을 사용하기에 알맞지 않을수도있습니다) 스테이트 패턴 객체의 상태에따라 객체의 행동이 변경된다. 객체를 사용하는 클라이언트 입장에서는 객체가 하는 행동이 완전히 바뀜으로써 자신이 호출하는 객체의 클래스가 바뀌는듯한 느낌을 받는다. 스트레티지 패턴과 상당히 유사한 패턴이다.(책에서도 이렇게 설명한다.) 스트레티지 패턴과의 차이점이라면, 우선, 사용 용도가 다르다는점이다. 스테이트 패턴은 상태에 따라서 행동을 동적으로 바꿔주기위해 사용하는 반면, 스트레티지패턴은 사용중 알고리즘군을 변경시켜주기위해 사용한다. 쉽게 생각해서 클라이언트가 객체의 행..
[디자인패턴] 컴포지트 패턴 책을 공부하며 새로운 문제를 만들고 구현한것을 기록한 게시글입니다. (이해한 내용을 바탕으로 작성했기 때문에, 내용이 정확하지않고 틀린부분이 있을수있으며, 예시가 패턴을 사용하기에 알맞지 않을수도있습니다) 컴포지트 패턴 - 클라이언트에서 객체컬렉션과 객체를 똑같이 처리한다. 쉽게말해, 객체를 담고있는 객체컬렉션과 객체컬렉션에 담겨있는 객체에대해서 똑같은 처리방법으로 접근할수있다는것이다. 트리 자료구조를 생각하면 이해가 쉬운데, 노드 D의 자식노드 E,F,G가 있다고하자. 이때, E, F, G는 D에 담겨있는 객체이고, D는 E,F,G를 담고있는 객체 컬렉션이다. 하지만, D는 항상 객체컬렉션이 아닐수도있다. D또한 어떠한 노드(A,B,C)의 자식중 하나일수있기때문이다. 즉, 각 노드를 객체이자 객체컬렉션..
[디자인 패턴] Iterator 패턴 책을 공부하며 새로운 문제를 만들고 구현한것을 기록한 게시글입니다. (이해한 내용을 바탕으로 작성했기 때문에, 내용이 정확하지않고 틀린부분이 있을수있으며, 예시가 패턴을 사용하기에 알맞지 않을수도있습니다) Iterator 패턴 - 자료구조의 구조를 드러내지않으면서, 해당 구조에있는 모든 항목을 참조할수있도록함. 클라이언트에게 자료구조를 드러내지않으면서, 자료구조에 값을 참조할수있도록 한다. 클라이언트는 자료구조에 대해 몰라도 되기때문에, 이후에 자료구조가 추가되거나, 변경되더라도 클라이언트 코드는 변경될필요가 없다. Iterator패턴을 구현해봤다. 각각 다른 자료구조를 사용하는 클래스가있다. 예를들어, Array를 구현한 RepeatOnArray가 있고, ArrayList를 구현한 RepeatOnArr..
[디자인 패턴] 템플릿 메소드 패턴 - compareTo 책을 공부하며 새로운 문제를 만들고 구현한것을 기록한 게시글입니다. (이해한 내용을 바탕으로 작성했기 때문에, 내용이 정확하지않고 틀린부분이 있을수있으며, 예시가 패턴을 사용하기에 알맞지 않을수도있습니다) 템플릿 메소드 패턴 알고리즘의 구조를 정의한다. 이때 일부 단계는 서브클래스에서 구현할수도있다. 템플릿 메소드패턴은, 알고리즘의 구조는 유지하면서 특정단계만 서브클래스에서 구현하도록 할수있다. 스트래티지 패턴과 알고리즘군을 캡슐화한다는점이 유사하지만, 스트래티지 패턴은 구성을, 템플릿 메소드 패턴은 상속을 이용한다. 문제 Java의 Collections API에는 sort메소드가 있다. Collections에 포함되어있는 ArrayList또한 sort를 사용할수있다. (Collections의 sort ..
[디자인 패턴] 어댑터 패턴 문제 - 레스토랑 책을 공부하며 새로운 문제를 만들고 구현한것을 기록한 게시글입니다. (이해한 내용을 바탕으로 작성했기 때문에, 내용이 정확하지않고 틀린부분이 있을수있으며, 예시가 패턴을 사용하기에 알맞지 않을수도있습니다) 어댑터 패턴 인터페이스를 클라이언트에서 요구하는 인터페이스로 변경함으로써, 인터페이스를 호환시키는 패턴 문제 저번에 풀었던, 파스타 문제와 연결되는 문제다. https://dlwnsdud205.tistory.com/177?category=855600 [디자인 패턴] 싱글턴 패턴 문제 - 파스타 (데코레이터, 옵저버, 팩토리) 책을 공부하며 새로운 문제를 만들고 구현한것을 기록한 게시글입니다. (이해한 내용을 바탕으로 작성했기 때문에, 내용이 정확하지않고 틀린부분이 있을수있으며, 예시가 패턴을 사용하기에..
[디자인 패턴] 커맨드 패턴 문제 - 커피공장 (커맨드 패턴, 데코레이터 패턴) 책을 공부하며 새로운 문제를 만들고 구현한것을 기록한 게시글입니다. (이해한 내용을 바탕으로 작성했기 때문에, 내용이 정확하지않고 틀린부분이 있을수있으며, 예시가 패턴을 사용하기에 알맞지 않을수도있습니다) 커맨드 패턴 - 메소드를 캡슐화하여 매개변수화 하는 패턴. - Invoker(메소드 요청자)는 메소드의 정보를 알 필요없이, 매개변수를 입력받아 execute를 실행하기만하면 된다.(즉, Invoker는 메소드 클래스가 execute를 구현한다는 사실 외엔 아무것도 몰라도된다.) - OCP원칙을 지키며, 코드의 수정을 최소화함 문제 커피 공장에서 일하고있는 준영이는 일이 너무 힘들어, 로봇을 만들어 자신의 작업을 자동화 해놓을려고한다. (준영이의 공장은 커피를 섞는 작업까지도 손으로 하는 수작업 공장이..
[디자인 패턴] 싱글턴 패턴 문제 - 파스타 (데코레이터, 옵저버, 팩토리) 책을 공부하며 새로운 문제를 만들고 구현한것을 기록한 게시글입니다. (이해한 내용을 바탕으로 작성했기 때문에, 내용이 정확하지않고 틀린부분이 있을수있으며, 예시가 패턴을 사용하기에 알맞지 않을수도있습니다) 싱글턴 패턴 클래스 인스턴스가 하나만 만들어지도록하며, 해당 인스턴스를 전역적으로 접근하도록함. 다중스레드를 이용할때, 싱글턴 패턴을 사용하면, 오류가 발생할수있다. (스레드가 동시에 클래스를 호출해, 인스턴스가 한개 초과로 생성된다거나..) 이를 방지하기위해, syncronized와 volatile을 사용한다. syncronized syncronized는 스레드간에 동기화를 시켜준다. A스레드와 B스레드가있다고하자. A스레드가 a메소드를 사용중일때, syncronized는 a메소드에 lock을건다. ..