35
백엔드 스터디 디자인패턴

백엔드 스터디 4주

Embed Size (px)

Citation preview

백엔드 스터디디자인패턴

어댑터 패턴

어댑터?

어댑터 패턴● 어댑터 패턴 정의

○ 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다 .

○ 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸수 없는 클래스들을 연결해서 쓸 수 있습니다.

어댑터 패턴● 객체 어댑터

○ 구성(Composition)을 사용하여 구현

● 클래스 어댑터○ 상속을 이용하여 구현

어댑터 패턴● 객체 어댑터 기본 설계

<<Interface>>

Target

request()

Client

Adapter

request()

Adaptee

specificRequest()

어댑터 패턴● 클래스 어댑터 기본 설계

Target

request()

Client Adaptee

specificRequest()

Adapter

request()

어댑터 패턴 예제● 전략 패턴에 사용한 오리 시뮬레이션 기억해보기

Duck

quack()fly()

Mallard Duck

quack()fly()

Redhead Duck

quack()fly()

Rubber Duck

quack()fly()

어댑터 패턴 예제● 전략 패턴에 사용한 오리 시뮬레이션 기억해보기

어댑터 패턴 예제● 오리 시뮬레이션에 칠면조 라이브러리를 추가 해야함

○ 칠면조 라이브러리는 오리 인터페이스를 사용하고 있지 않음

어댑터 패턴 예제● 어댑터 패턴을 어떻게 사용해야할까?

기존 오리 시스템

칠면조 라이브러리

기존 오리 시스템

칠면조 라이브러리

어댑터

어댑터 패턴 예제 (객체 어댑터)● 오리 시뮬레이션에 사용할 어댑터 만들기

어댑터 패턴 예제 (객체 어댑터)● 오리 시뮬레이션에 칠면조 추가하여 실행보기

어댑터 패턴 예제● 객체 어댑터 방법이 아닌 클래스 어댑터 방법으로 구현해보기

<<Interface>>

Duck

quack()fly()

Client Turkey

gobble()shortFly()

ClassTurkeyAdapter

quack()fly()

어댑터 패턴 예제 (클래스 어댑터)● 오리 시뮬레이션에 사용할 어댑터 만들기

어댑터 패턴 예제 (클래스 어댑터)● 오리 시뮬레이션에 칠면조 추가하여 실행보기

객체와 클래스 어댑터 차이● 객체 어댑터

○ 모든 서브클래스에 적용된다. - 장점○ 유연성이 높다. - 장점○ 어댑터 하나만으로는 사용할 수 없다. - 단점

● 클래스 어댑터○ 오버라이드를 이용하여 기능을 추가 할 수 있다. - 장점○ 어댑터를 하나로 사용할 수 있다. - 장점○ 특정 클래스에만 적용된다. (새로운 칠면조가 생기면?) - 단점

○ 자바에서 다중 상속이 지원되지 않기 때문에 클래스 어댑터 구현에 제약을 받을 수 있다. - 단점

Java에서 어댑터 패턴 적용 사례● Arrays.asList

템플릿 메소드 패턴

템플릿?● 플라스틱이나 아크릴로 만든 앏은 판에 여러 가지 크기의 원 또는 타원 통과 같은 기본 도형이나 각종 문자기호 등을 그리는 제도용구

출처 : 네이버 지식백과

템플릿 메소드 패턴● 정의

○ 메소드에서 알고리즘의 골격을 정의 합니다.○ 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다.○ 알고리즘의 구조는 유지하면서 서브클래스에서 특정 단계를 재정의 할 수 있습니다.

템플릿 메소드 패턴● 기본 설계 AbstractClass

templeteMethod()primitiveOpertaion1()primitiveOpertaion2()

ConcreteClass

primitiveOpertaion1()primitiveOpertaion2()

primitiveOpertaion1()primitiveOpertaion2()

차 메이커 예제● 커피 만드는 방법

○ 물을 끓인다.○ 끓는 물에 커피를 우려낸다.○ 커피를 컵에 따른다.○ 설탕과 우유를 추가한다.

● 홍차 만드는 방법○ 물을 끓인다.○ 끓는 물에 차를 우려낸다.○ 차를 컵에 따른다.○ 레몬을 추가한다.

차 메이커 예제● 커피 만드는 코드

○ 물을 끓인다.○ 끓는 물에 커피를 우려낸다.○ 커피를 컵에 따른다.○ 설탕과 우유를 추가한다.

차 메이커 예제● 홍차 만드는 코드

○ 물을 끓인다.○ 끓는 물에 차를 우려낸다.○ 차를 컵에 따른다.○ 레몬을 추가한다.

차 메이커 예제● 실행 결과

차 메이커 예제 코드 중복● 코드 중복 문제

차 메이커 템플릿 메소드 패턴 적용 예제● 템플릿 메소드 패턴 적용 CaffeineBeverage

+ prepareRecipe()- boilWater()- pourlnCup()

Coffee

- brewCoffeeGrinds()- addSugarAndMilk()

Tea

- steepTeaBag()- addLemon()

차 메이커 템플릿 메소드 패턴 적용 예제● 템플릿 메소드 패턴 적용

차 메이커 템플릿 메소드 패턴 적용 예제● 커피, 홍차 만드는 클래스

차 메이커 템플릿 메소드 패턴 적용 예제● 템플릿 메소드 패턴 적용 실행 결과

템플릿 메소드 패턴 적용● 알고리즘이 한곳에 있다.● 코드 재사용성이 높다. (중복 코드가 적다.)● 알고리즘이 변경 될때 수정할 코드가 적다.● 새로운 음료를 추가 하기 쉽다.

후크(Hook) 메소드● 후크(Hook) 메소드는 추상 클래스에서 선언되는 메소드긴 하지만 기본적인 내용만 구현되어 있거나 아무 코드도 들어있지 않은 메소드

자바에서 템플릿 메소드 적용 예제 - Swing● Swing 예제