본문 바로가기

[디자인패턴] 어댑터 패턴과 퍼사드 패턴 안녕하세요 남갯입니다 오늘은 어댑터 패턴과 퍼사드 패턴에 대해 포스팅 해보려고 합니다. 어댑터 패턴 사건의 발단 객체지향 어뎁터는 그렇게 어렵지 않게 알 수 있습니다. 특히 안드로이드에서는 리사이클러뷰나 리스트뷰에 어댑터를 이용하기도 하고,실생활에서는 유럽여행을 갈때 220v 플러그를 110v에 동작이 가능하도록 하는 어댑터를 통해 여행을 가게 됩니다.쉽게말해서 어떤 인터페이스를 클라이언트에서의 요구하는 형태의 인터페이스로 적응시켜주는 역할을 하게 됩니다. 실제 코드를 오리와 칠면조를 통해 알아보겠습니다. interface Duck { fun quack() // 꽥꽥 fun fly() // 멀리날아감 } class MallardDuck : Duck { override fun quack() { printl..
[디자인패턴] 커맨드패턴 안녕하세요 남갯입니다오늘은 커맨드 패턴에 대해 포스팅해보려고합니다 사건의 발단이전의 날씨 관련 옵져버 패턴 프로그래밍을 성공적으로 완수하면서 추가적인 일을 맡게되었습니다.각 프로그래밍이 가능한 슬롯이 있는 홈 오토메이션 리모컨의 API의 디자인을 의뢰받았습다. 실제 가전제품에는 TV , Light garage 등 각자의 다른 클래스들의 동작이 있었습니다. TV = on, off, setchannel , setvolumelight = on, offgarage = up, down , stop, lighton, lightdown, lock........ 클래스를 보아하니 공통적인것은 없을것이고 앞으로 이런 클래스가 더 추가가 가능할지도 모릅니다. 그래서 우리는 커맨드패턴을 이용하기로 했습니다. 실제 식당에서 ..
[디자인패턴] 팩토리패턴 안녕하세요 남갯입니다 오늘은 팩토리 패턴에 대해 포스팅해보려고합니다. 사건의발단피자가게를 운영하고 있고 피자가게의 코드를 아래와 같이 만들었습니다. fun orderPizza(): Pizza { val pizza = Pizza().apply { prepare() bake() cut() bake() } return pizza } 하지만 피자에는 종류는 여러개이므로 코드에 피자종류를 추가하게 되었습니다. enum class PizzaType { CHEESE, GREEK, PEPPRONI } fun orderPizza(type: PizzaType): Pizza { var pizza: Pizza when (type) { PizzaType.CHEESE -> pizza = CheessPizza() PizzaType..
[디자인패턴] 데코레이터 패턴 안녕하세요 남갯입니다. 오늘은 데코레이터 패턴에 대해 포스팅 해보려고합니다. 사건의 시작 커피숍 커피점에서는 Beverage 의 추상클래스를 만들어 음료를 제공하고 있었는데, 커피에는 두유, 우유, 모카 등을 추가하거나 휘핑크림도 추가가 가능하게 해야합니다. 그러다보니 여러개의 클래스를 만들었습니다. Beverage()↑class DartRoastWithWhip()class DartRoastWithSoy()class HouseBlendWithSoy()class HouseBlendWithSoy()..... 이렇게 각각을 생성해서 Cost()를 구하게되면 내용물의 가격이 바뀐다던가 커피의 가격이 바뀔때마다 Cost를 수정해줘야 합니다. 그래서 상속을 통해 관리하면 안되나요?그럼 상속을 통해 상위클래스를 만들..
[디자인패턴] 옵저버패턴 안녕하세요 남갯입니다. 오늘도 어김없이 헤드퍼스트 디자인패턴의 도움을 받았습니다. 오늘은 디자인패턴 중 옵져버 패턴에 대해 포스팅해보려고 합니다. 옵져버패턴이란?옵저버 패턴은 한객체의 상태가 바뀌면 그 객체에 의존하는 다른객체들에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대 다의 의존성을 정의합니다. subject 혹은 Observable을 통해 구독을 하고있던 옵저버에게 연락하여 갱신을 시킵니다. 옵저버를 구독하고있는 의존된 객체들은 언제든지 Subject or Observable에게 구독을 요청할 수 있어야하고 원하는 시점이 구독을 취소 할 수 있어야합니다. 사건의 시작!기상정보스테이션 구축프로젝트의 업체로 선정되어서 WeatherData 객체를 통해 기온 습도 기압을 추적합니다. 이 데이터..
[디자인패턴] 스트래티지 패턴 안녕하세요 남갯입니다 오늘은 스트래티지 패턴에 대해 포스팅 해보려고합니다. 해드퍼스트 디자인패턴의 내용을 참조했습니다. 스트래티지 패턴이란?스트래티지 패턴은 알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 알고리즘의 군이란 비슷한 Behavior(동작)을 하는 기능을 뜻하는것이다. 비슷한 알고리즘군을 Composition을 이용하므로서 알고리즘군은 별도의 클래스를 만들어 캡슐화를 시켜 시스템의 유연성을 향상시킵니다. 오리게임의 예시오리 게임 회사에서 어플리케이션을 만든다고 했을때, 기존에 날지못하는 오리들에게 하늘을 나는 기능을 추가해달라는 요구를 받았습니다. 요구사항 1 : fly..
[SOLID] 객체지향설계 안녕하세요 남갯입니다. 오늘은 객체지향설계 원칙인 SOLID에 대해서 포스팅해보려고합니다. 이번스터디에서 공부했던 내용을 정리해보고 스터디의 과제인 SOLID를 소개하는 유튜브를 보고 SOLID에 대해 발표하신 내용에서 개인적으로 생각하는 에러를 찾아보는 시간을 가져보려고합니다. SOLID 유튜브 영상https://www.youtube.com/watch?v=QXVO2NcarkQ&t=592s SOLID란?로버트 마틴이 2000년대 초반 명명한 객체지향 프로그래밍 및 설계의 다섯가지 기본원칙을 마이클 페더스가 두문자어 기억술로 소개한것입니다. 프로그래머가 시간이 지나도 유지보수와 확장이 쉬운 시스템을 만들고자 할때 이 원칙을 함께 적용할 수 있다. 실제 소스코드를 읽기 쉽고 확장하기 쉽게 리팩토링을 통해 코..
[디자인패턴] Delegation Pattern 안녕하세요 남갯입니다오늘은 Delegation Pattern에 대해 개인적으로 정리해보려고합니다.잘못된 부분을 바로 알려주시면 감사하겠습니다. --사진 출처--http://best-practice-software-engineering.ifs.tuwien.ac.at/patterns/delegation.html Delegation Pattern보통 Delegaiton Pattern을 상속을 대체할때 사용하라고 말합니다. 보통 상속을 경우는 부모클래스와 자식클래스와 밀접한 관계가 있을때 사용하게 되는데, 비슷한 상속을 받는 경우가 있을때 Delegation Pattern은 되게 유연하게 관계를 만들어 줄 수 있습니다. 1. 여러 클래스에서 겹치는 매소드를 줄이기는것이 필요하기 위해 사용합니다.(Kotlin 소..