Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Design Pattern #1

Desigin Pattern 첫번째 (사내 세미나용)
by

Hunmin Kim

on 18 June 2015

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Design Pattern #1

Design Pattern #
자주 반복되는 문제를 해결하기 위한 방법 들 중 재사용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것.
객체지향적으로 오리 만들기
청둥오리
붉은머리오리
.
.
.
첫번째, 상속을 이용
Duck
quack()
swim()
display()
MallardDuck
display() {
....
}
RedheadDuck
display() {
....
}
fly()
디자인 패턴이란?
고무 오리를 추가하게 된다면?
두번째, 인터페이스는 어떨까?
문제가 뭐냐?
코드 재사용이 어렵다.

유지보수가 힘들다.
디자인 원칙 #1
애플리케이션에서 달라지는 부분을 찾아내고,

달라지지 않는 부분으로부터 분리 시킨다.
바뀌는 부분은 오리의 행동
나는 행동
꽥꽥거리는
행동
디자인 원칙 #2
구현이 아닌 인터페이스에 맞춰서

프로그래밍한다
뭔 개소리냐?
구현에 의한 프로그래밍

Dog d = new Dog();
d.bark();


인터페이스/상위 형식에 맞춘 경우

Animal animal = new Dog();
animal.makeSound();


더 좋은 코드

Animal a = getAnimal();
a.makeSound();
구성을 위한 오리의 행동 클래스
캡슐화!!
완성된 오리 클래스
public class RubberDuck extends Duck {

public RubberDuck() {
flyBehavior = new FlyNoWay();
quackBehavior = new Quack();
}

public void display() {
......
}

}
"님 로켓추진 오리 내일 아침까지 만들 수 있음??"
"ㅇㅋㅇㅋ 그거 열나 껌임. 오늘 밤까지 ㄱㄱㄱ"
public class FlyRocketPowered implements FlyBehavitor {

public void fly() {
System.out.println( "로켓 추진으로 날아갑니다." );
}

}
디자인 원칙 #3
상속보다는 구성을 활용한다.

is보다는 has.
스트래티지 패턴(Strategy Pattern)
알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지를 활요하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.
public abstract class Duck {

FlyBehavior flyBehavior;
QuackBehavior quackBehavior;

public duck{}

public abstract void display();

public void performFly(){
flyBehavior.fly();
}
.
.
}
Full transcript