일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 테트리스
- T자형인재
- 자취필수템
- 소프시스 밤부 좌식 엑슬 테이블
- 프래그먼트
- 캐치마인드
- 아비투스
- 1일1커밋
- 끝말잇기
- 함수형 프로그래밍
- 한달어스
- 안드로이드
- 커스텀린트
- 재택근무
- 목적 중심 리더십
- 베드테이블
- 한달독서
- 어떻게 나답게 살 것인가
- 한단어의힘
- 북한살둘레길
- 지지않는다는말
- 목적중심리더십
- 소프시스
- 슬기로운 온라인 게임
- 베드트레이
- 브런치작가되기
- 한달브런치북만들기
- 리얼하다
- 좌식테이블
- 면접
- Today
- Total
목록디자인패턴 (12)
정상에서 IT를 외치다
안녕하세요. 블랙진입니다.책 HeadFirstDesignPattern 을 보며 코드를 Kotlin 으로 바꿔가며 공부한 내용입니다. 컴파운드 패턴 두 개 이상의 패턴을 결합하여 일반적으로 자주 등장하는 문제들에 대한 해법을 제공합니다. 즉 일련의 패턴을 함께 사용하여 다양한 디자인 문제를 해결하는 것을 컴파운드 패턴이라고 부릅니다. 즉 패턴으로 이루어진 패턴인 셈이죠. 패턴 섞어 쓰기 - 하나의 디자인 문제를 해결하기 위해 여러 패턴을 함께 사용하는 경우가 종종 있습니다.- 컴파운드 패턴이란 반복적으로 생길 수 있는 일반적인 문제를 해결하기 위한 용도로 두 개 이상의 패턴을 결합해서 사용하는 것을 뜻합니다. 오리와의 재희 1. 우선 Quackable 인터페이스를 만듭니다.interface Quackabl..
안녕하세요. 블랙진입니다.책 HeadFirstDesignPattern 을 보며 코드를 Kotlin 으로 바꿔가며 공부한 내용입니다. 프록시 패턴 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴 프록시가 접근을 제어하는 몇가지 방법 1. 원격프록시를 써서 원격 객체에 대한 접근을 제어할 수 있습니다.2. 가상 프록시를 써서 생성하기 힘든 자원에 대한 접근을 제어할 수 있습니다.3. 보호 프록시를 써서 접근 권한이 필요한 자원에 대한 접근을 제어할 수 있습니다. 프록시 패턴을 이용하면 원격 객체라든가 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 객체에 대한 접근을 제어하는 대변자 객체를 만들 수 있습니다. 원격 프록시 원격 프록시는 다른 JVM에 들어..
안녕하세요. 블랙진입니다.책 HeadFirstDesignPattern 을 보며 코드를 Kotlin 으로 바꿔가며 공부한 내용입니다. 스테이트 패턴 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있습니다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있습니다. 문제 4개의 상태와 행동을 가지는 뽑기 기계가 있습니다. 상태enum class STATE { SOLD_OUT, //알맹이 매진 NO_QUARTER, // 동전 없음 HAS_QUARTER, // 동전 있음 SOLD // 알맹이 판매 } 행동//동전이 투입된 경우 fun insertQuater() { ... } //사용자가 동전을 반환 받으려고 하는 경우 fun ejectQuarter() { ... } //손잡이를 돌리는 경우 f..
안녕하세요. 블랙진입니다.책 HeadFirstDesignPattern 을 보며 코드를 Kotlin 으로 바꿔가며 공부한 내용입니다. 이터레이터 패턴 이터레이터 패턴은 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공해 줍니다. 이 패턴을 이용하면 집합체 내에서 어떤 식으로 일이 처리되는지에 대해서 전혀 모르는 상태에서 그 안에 들어있는 모든 항목들에 대해서 반복작업을 수행할 수 있습니다. 즉 내부적인 구현 방법을 외부로 노출시키지 않으면서도 집합체에 있는 모든 항목에 일일이 접근할 수 있습니다 예제 객체지향 마을에 팬케이크 하우스 메뉴와 저녁 메뉴를 가지고 있는 음식점이 있습니다. 각 메뉴는 리스트와 배열의 서로 다른 형식으로 저장합니다. ..
안녕하세요. 블랙진입니다.책 HeadFirstDesignPattern 을 보며 코드를 Kotlin 으로 바꿔가며 공부한 내용입니다. 템플릿 메소드 패턴 메소드에서 알고리즘의 골격을 정의합니다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의 할 수 있습니다. 예제 우리는 카페인이 들어간 음료, 그중 커피와 티를 만드는 예제를 살펴보겠습니다. class Coffee { fun prepareRecipe() { boilWater() brewCoffeeGrinds() pourInCup() addSugarAndMilk() } private fun boilWater() { println("물 끓이는 중..
안녕하세요. 불랙진입니다.책 HeadFirstDesignPattern 을 보며 코드를 Kotlin 으로 바꿔가며 공부한 내용입니다. 어댑터 패턴과 퍼사드 패턴 데코레이터 패턴을 기억하시나요? 객체를 래퍼로 감싸서 새로운 역활을 부여했습니다. 이번에는 다른 목적으로 객체를 감쌀 것입니다. 실재와 다른 인터페이스를 가진 것처럼 보이도록 하는 방법입니다. 어댑터 어떤 인터페이스를 클라이언트에서 요구하는 형태의 인터페이스에 적응시켜주는 역활 오리처럼 걷고 꽥꽥거린다면 반드시 오리라고 할 수 없습니다.오리 어댑터로 감싼 칠면조일 수도 있습니다.interface Duck { fun quack() fun fly() } class MallardDuck: Duck { override fun quack() { printl..
안녕하세요. 블랙진입니다.책 HeadFirstDesignPattern 을 보며 코드를 Kotlin 으로 바꿔가며 공부한 내용입니다. 호출 캡슐화 - 메소드 호출을 캡슐화하는 방법에 대해 배워보겠습니다. 커맨드 패턴 커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있습니다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업 취소 기능도 지원가능합니다 커맨드 패턴을 이용하면 요청을 하는 객체와 그 요청을 수행하는 객체를 분리시킬 수 있습니다. 사용방법 커맨드 객체는 일련의 행동을 특정 리시버하고 연결시킴으로써 요구 사항을 캡슐화합니다. 이렇게 하기 위해서 행동과 리시버를 한 객체에 집어넣고, excute()라는 메..
안녕하세요. 블랙진입니다.책 HeadFirstDesignPattern 을 보며 코드를 Kotlin 으로 바꿔가며 공부한 내용입니다. New는 구상 객체를 뜻합니다. new를 사용하는 것은 구상 클래스의 인스턴스를 만드는 것입니다. 당연히 인터페이스가 아닌 특정 구현을 사용합니다. 구상 클래스를 바탕으로 코딩을 하면 나중에 코드를 수정해야 할 가능성이 높아지고, 유연성이 떨어지게 됩니다. 문제 피자를 주문할 수 있는 orderPizza가 있습니다. type을 매개변수로 받아 Cheese, Greek, Pepperoni 피자를 new 를 사용해 만들고 있습니다. 이런 코드가 있다는 것은 뭔가 변경하거나 확장해야 할 때 코드를 다시 확인하고 추가 또는 제거해야 되는 불편함이 있습니다. 또한 오류가 생길 가능성..
안녕하세요. 블랙진입니다.책 HeadFirstDesignPatter 을 보며 코드를 Kotlin 으로 바꿔가며 공부한 내용입니다. 데코레이터 패턴(Decorator pattern)이란 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다.출처 위키 객체의 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한 - 객체 작성이라는 형식으로 실행중에 클래스를 꾸미는 방법입니다.- 객체에 추가적인 요건을 동적으로 첨가할 수 있습니다. 예제 음료수를 상속한 에스프레소가 있고 여기에는 스팀밀크가 들어갈 수도 있고 모카가 들어갈 수도 있습니다.//음료를..
안녕하세요. 블랙진입니다. 디자인패턴을 공부하다가 IoC, DI와 DIP에 관해 개념이 헷갈려 제 나름대로 정리 해봤습니다. IoC (Inversion of Control) 제어 반전, 제어의 반전, 역제어는 프로그래머가 작성한 프로그램이 재사용 라이브러리의 흐름 제어를 받게 되는 소프트웨어 디자인 패턴을 말한다. 줄여서 IoC(Inversion of Control)이라고 부른다. 전통적인 프로그래밍에서 흐름은 프로그래머가 작성한 프로그램이 외부 라이브러리의 코드를 호출해 이용한다. 하지만 제어 반전이 적용된 구조에서는 외부 라이브러리의 코드가 프로그래머가 작성한 코드를 호출한다. 설계 목적상 제어 반전의 목적은 다음과 같다:작업을 구현하는 방식과 작업 수행 자체를 분리한다.모듈을 제작할 때, 모듈과 외..