Uknow's Lab.
article thumbnail
[디자인 패턴] Adaptor(어댑터) 패턴
CS 지식/디자인 패턴 2024. 5. 8. 00:47

어댑터 일본 여행을 갈 때 필요한 준비물 중 하나는 전기 어댑터(Adapter/Adaptor)입니다.한국은 220V를 쓰지만 일본은 110V를 쓰기 때문에, 플러그 모양이 서로 다릅니다.때문에 220V를 110V으로 바꿔주는 어댑터가 필요합니다. 객체지향 프로그래밍과 디자인 패턴에서 사용되는 어댑터 패턴 역시 이와 비슷합니다.기존의 클래스 인터페이스를 새로운 인터페이스에 맞추고자 사용하죠.서로 호환되지 않는 두 클래스를 연결할 때 사용합니다.  업체에서 제공한 클래스를 사용해야 할 때, 이 클래스의 인터페이스가 기존에 사용하던 인터페이스와 꽤나 다릅니다.    기존 코드를 바꾸기 어려울 때,기존의 사용하던 코드를 새 업체의 코드에 맞게 적응시켜주는 클래스를 만듬으로써,서로 호환되는 형태의 요청으로 만들어..

article thumbnail
[디자인 패턴] Singleton(싱글톤) 패턴
CS 지식/디자인 패턴 2024. 3. 16. 01:21

인스턴스가 단 하나밖에 없는 객체 책임을 분리하고 유연성을 키우기 위해 클래스를 나누었지만 Config, 로그 기록용 클래스 등 인스턴스가 단 하나만 있어도 작동하는 경우는 꽤나 있습니다. 이 경우, 인스턴스를 2개 이상 생성할 경우 괜히 자원만 더 잡아먹을 뿐이죠. 싱글톤 패턴 구현 : private 생성자, getInstance, static 3총사 public class MySingleton { private static MySingleton instance = null; // 생성자를 private로 두어 기본 생성자를 못쓰게 함 private MySingleton() { } public static MySingleton getInstance() { if (instance == null) { in..

article thumbnail
[디자인 패턴] Factory(팩토리) 패턴
CS 지식/디자인 패턴 2024. 3. 10. 01:35

new 키워드 Pizza pizza = new CheesePizza(); new라는 키워드는 자바의 키워드 중 하나로, 객체를 생성한다는 점에서 한 번도 사용하지 않고 코딩하기는 사실상 불가능합니다. Pizza pizza; if(type == "cheese") { pizza = new CheesePizza(); } else if(type == "veggie") { pizza = new VeggiePizza(); } else if (type == "pepperoni") { pizza = new PepperoniPizza(); } pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); 일련의 구상 클래스가 있을 때, 위와 같은 형태가 나타나게 됩니다. 인터페이스..

article thumbnail
[디자인 패턴] Decorator (데코레이터) 패턴
CS 지식/디자인 패턴 2023. 9. 12. 14:26

데코레이터 (Decorator) 패턴 데코레이터 패턴이란, 이름에서 알 수 있듯이 기존 객체에 새로운 요소를 추가할 때 쓰입니다. 흔히 음식이나 방을 꾸밀 때 데코한다고 하죠? 데코레이터 패턴을 알게되면 이제는 클래스에도 데코를 할 수 있게 될 겁니다. 방을 데코할땐 원래 있던 가구를 치우거나 바꿀수도 있습니다. 하지만 데코레이터 패턴을 사용해 클래스를 바꿀 때에는 기존의 클래스를 수정하지 않으면서, 새로운 기능을 추가할 때 사용합니다. 정확히는, 기존의 클래스를 감싸는(wrap) 방식으로 이루어집니다. 이제 음료를 데코레이터 해봅시다. 카페를 차렸습니다. Uknow 커피 디자인 패턴 마을점. 신규 오픈하였습니다. 아직 메뉴가 몇개 없지만, 이를 전산화하기 위한 작업을 해봤습니다. 클래스 Boooooom..

article thumbnail
[디자인 패턴] Observer(옵저버) 패턴
CS 지식/디자인 패턴 2023. 9. 8. 22:24

Observer Pattern (옵저버 패턴) 옵저버 패턴은 특정 객체를 관찰(Observe)하다가, 해당 객체의 상태가 변경된다면 이를 관측하고 있는 객체들에게 연락을 하는 일대다(one-to-many) 의존성을 정의합니다. 사실 자바 Swing, 안드로이드, 프론트엔드 등 GUI 프로그래밍을 하신 분들이라면 버튼을 하나 만들고, 이를 클릭하면 특정 이벤트를 발생시키기 위해 onClickListenr 등을 사용해본 경험이 있으실텐데요. 이와 같은 Listener들은 버튼을 관측하고 있다가, 사용자가 버튼을 누루면 이벤트를 발생시키는 Observer 패턴의 일종인 Listener 패턴입니다. 버튼 클릭 리스너를 떠올리니, '한 객체를 관측하고 있다가 해당 객체의 상태가 변화되면 이벤트를 발생시킨다'는게 ..

article thumbnail
[디자인 패턴] Strategy(전략) 패턴 + Template Callback Pattern
CS 지식/디자인 패턴 2023. 6. 20. 23:47

Strategy Pattern 스트레티지, 혹은 전략 패턴은 코드가 실행되는 중인 런타임 환경 중, 객체를 바꾸는 패턴입니다. 일반적으로 상속을 사용할 경우, 코드 작성 단계에서 이미 부모 클래스를 상속받았으므로, 코드 실행 중 부모 클래스를 변경하는 것은 불가능하기에, 주로 동적으로 알고리즘(전략, 동작, 수행)을 바꾸기 위해 쓰입니다. 출저 - https://ko.wikipedia.org/wiki/%EC%A0%84%EB%9E%B5_%ED%8C%A8%ED%84%B4 전략 패턴 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 전략 패턴(strategy pattern) 또는 정책 패턴(policy pattern)은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴..