본문 바로가기

디자인패턴

[GOF] 생성패턴이란? 안녕하세요 남갯입니다 오늘은 GOF 생성패턴에 대해 포스팅 해보려고 합니다. 생성패턴이란? 생성패턴은 인스턴스를 만드는 절차를 추상화하는 패턴. 객체를 생성-합성 하는 방법이나 객체의 표현방법과 시스템을 분리해 줍니다. 상속보다는 복합을 사용하는쪽으로 진화되어 가면서 더 중요해지는 추세. 생성패턴의 특징 1. 생성패턴은 시스템이 어떤 구체 클래스를 사용하는지에 대한 정보를 캡슐화 2. 생성패턴은 이들 클래스의 인스턴스들이 어떻게 만들고 어떻게 서로 맞붙는지에 대한 부분을 완전히 가려줍니다. 즉 무엇이 생성되고 누가 이것을 생성하며 어떻게 생성이 되는지 언제 생성할 것이지에 대한 유연성을 확보 가능 추상팩토리패턴 의도 상세화된 서브클래스를 정의하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생..
[디자인패턴] 스테이트 패턴 (State) 안녕하세요 남갯입니다 오늘은 스테이트 패턴에 대해 포스팅 해보려고 합니다. 사건의 발단 뽑기회사에서 뽑기 프로그램을 만들게 되었습니다. 총 상태는 아래와같이 4가지가 있고,동전없을때 동전을 넣으면 동전있음으로 바뀌고, 이것이 상태의 전환입니다. 즉 상태는 4개이고 1.동전 있음2.동전 없음.3.알맹이 판매.4.알맹이 매진. 행동도 4개가 되는거죠1. 동전 투입2. 동전 반환3. 손잡이 돌림4. 알맹이 내보냄 이제 상태 기계 역할을 하는 클래스를 만들어보겠습니다.fun insertQuarter(){ if(state == HAS_QUARTER){ println("동전은 한개만 넣어주세요") }else if(state == SOLD_OUT){ println("매진되었습니다. 다음 기회에 이용해주세요.") }e..
[디자인패턴] 이터레이터 패턴 안녕하세요 남갯입니다. 오늘은 이터레이터 패턴에 대해 포스팅 해보려고 합니다. 사건의 발단객체마을의 식당과 객체마을의 팬케이크 하우스의 두 가게가 합쳐지면서 메뉴를 합의해서 바꿔야하는 원인이 생겼습니다.한쪽은 ArrayList를 이용해서 만들었고 한쪽은 배열을 써서 만들었습니다. 두 가게는 메뉴를 구현하는 방법에 대해 합의를 보게 되었습니다. class MenuItem( val name: String, val description: String, val vegetarian: Boolean, val price: Double ) 이렇게 말이죠 두 가게가 어떤 문제때문에 싸우는지 보겠습니다. 팬케익을 만드는 하우스의 메뉴는 아래와 같습니다.class pancakeHouseMenu(val menuItems: A..
[디자인패턴] 어댑터 패턴과 퍼사드 패턴 안녕하세요 남갯입니다 오늘은 어댑터 패턴과 퍼사드 패턴에 대해 포스팅 해보려고 합니다. 어댑터 패턴 사건의 발단 객체지향 어뎁터는 그렇게 어렵지 않게 알 수 있습니다. 특히 안드로이드에서는 리사이클러뷰나 리스트뷰에 어댑터를 이용하기도 하고,실생활에서는 유럽여행을 갈때 220v 플러그를 110v에 동작이 가능하도록 하는 어댑터를 통해 여행을 가게 됩니다.쉽게말해서 어떤 인터페이스를 클라이언트에서의 요구하는 형태의 인터페이스로 적응시켜주는 역할을 하게 됩니다. 실제 코드를 오리와 칠면조를 통해 알아보겠습니다. interface Duck { fun quack() // 꽥꽥 fun fly() // 멀리날아감 } class MallardDuck : Duck { override fun quack() { printl..
[디자인패턴] 옵저버패턴 안녕하세요 남갯입니다. 오늘도 어김없이 헤드퍼스트 디자인패턴의 도움을 받았습니다. 오늘은 디자인패턴 중 옵져버 패턴에 대해 포스팅해보려고 합니다. 옵져버패턴이란?옵저버 패턴은 한객체의 상태가 바뀌면 그 객체에 의존하는 다른객체들에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대 다의 의존성을 정의합니다. subject 혹은 Observable을 통해 구독을 하고있던 옵저버에게 연락하여 갱신을 시킵니다. 옵저버를 구독하고있는 의존된 객체들은 언제든지 Subject or Observable에게 구독을 요청할 수 있어야하고 원하는 시점이 구독을 취소 할 수 있어야합니다. 사건의 시작!기상정보스테이션 구축프로젝트의 업체로 선정되어서 WeatherData 객체를 통해 기온 습도 기압을 추적합니다. 이 데이터..
[디자인패턴] 스트래티지 패턴 안녕하세요 남갯입니다 오늘은 스트래티지 패턴에 대해 포스팅 해보려고합니다. 해드퍼스트 디자인패턴의 내용을 참조했습니다. 스트래티지 패턴이란?스트래티지 패턴은 알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 알고리즘의 군이란 비슷한 Behavior(동작)을 하는 기능을 뜻하는것이다. 비슷한 알고리즘군을 Composition을 이용하므로서 알고리즘군은 별도의 클래스를 만들어 캡슐화를 시켜 시스템의 유연성을 향상시킵니다. 오리게임의 예시오리 게임 회사에서 어플리케이션을 만든다고 했을때, 기존에 날지못하는 오리들에게 하늘을 나는 기능을 추가해달라는 요구를 받았습니다. 요구사항 1 : fly..