본문 바로가기

디자인 패턴

[디자인패턴] 프록시 패턴 Proxy pattern 안녕하세요 남갯입니다 오늘은 프록시 패턴에 대해 포스팅해보려고합니다. 사건의 발단이전시간에 진행했던 뽑기 기계의 재고와 현재상태를 알아낼 수 있도록 해달라는 부탁이 왔습니다. 위치를 알아낼 수 있는 코드를 만들기 위해 class GumballMachine(val location: String, val count: Int) { } 이와같이 생성하고 class GumballMonitor(val machine: GumballMachine) { fun report() { println("뽑기 기계 위치: ${machine.location}") println("현재 재고: ${machine.count}") } } 모니터 클래스를 생성해서 기계의 상태를 가져오는것을 만들었습니다. fun main() { val co..
[디자인패턴] 스테이트 패턴 (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..
[디자인패턴] 스트래티지 패턴 안녕하세요 남갯입니다 오늘은 스트래티지 패턴에 대해 포스팅 해보려고합니다. 해드퍼스트 디자인패턴의 내용을 참조했습니다. 스트래티지 패턴이란?스트래티지 패턴은 알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 알고리즘의 군이란 비슷한 Behavior(동작)을 하는 기능을 뜻하는것이다. 비슷한 알고리즘군을 Composition을 이용하므로서 알고리즘군은 별도의 클래스를 만들어 캡슐화를 시켜 시스템의 유연성을 향상시킵니다. 오리게임의 예시오리 게임 회사에서 어플리케이션을 만든다고 했을때, 기존에 날지못하는 오리들에게 하늘을 나는 기능을 추가해달라는 요구를 받았습니다. 요구사항 1 : fly..
[디자인패턴] Delegation Pattern 안녕하세요 남갯입니다오늘은 Delegation Pattern에 대해 개인적으로 정리해보려고합니다.잘못된 부분을 바로 알려주시면 감사하겠습니다. --사진 출처--http://best-practice-software-engineering.ifs.tuwien.ac.at/patterns/delegation.html Delegation Pattern보통 Delegaiton Pattern을 상속을 대체할때 사용하라고 말합니다. 보통 상속을 경우는 부모클래스와 자식클래스와 밀접한 관계가 있을때 사용하게 되는데, 비슷한 상속을 받는 경우가 있을때 Delegation Pattern은 되게 유연하게 관계를 만들어 줄 수 있습니다. 1. 여러 클래스에서 겹치는 매소드를 줄이기는것이 필요하기 위해 사용합니다.(Kotlin 소..