2 단계 : 추상화 class 오리 { class 청둥오리 extends 오리 { class 물오리 extends 오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck.swim();

Similar documents
JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - Strategy Pattern

PowerPoint Presentation

Design Issues

Microsoft PowerPoint - 2강

제11장 프로세스와 쓰레드

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Microsoft PowerPoint - 04-UDP Programming.ppt

오버라이딩 (Overriding)

제8장 자바 GUI 프로그래밍 II

%eb%8f%99%ec%9d%b8-[NO_09]%20%ec%9d%98%ea%b3%bc%eb%8c%80%ed%95%99%20%ec%86%8c%ec%8b%9d%ec%a7%80_F(%ec%b5%9c%ec%a2%85)-2.pdf

gnu-lee-oop-kor-lec06-3-chap7

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - Java7.pptx

Network Programming


유니티 변수-함수.key

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

OOP 소개

Cluster management software

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft Word - EEL2 Lab4.docx

OOP 소개

Microsoft PowerPoint 장강의노트.ppt

Microsoft PowerPoint - lec12 [호환 모드]

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

5장.key

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 09. 예외처리

C++ Programming

PowerPoint Presentation

제목

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

제목

Microsoft PowerPoint - 14주차 강의자료

PowerPoint Presentation

Spring Data JPA Many To Many 양방향 관계 예제

Microsoft PowerPoint - 06-Chapter09-Event.ppt

PowerPoint Presentation

09-interface.key

Spring Boot

JAVA PROGRAMMING 실습 07. 상속

rmi_박준용_final.PDF

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - RMI.ppt

PowerPoint Template

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밊

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

설계란 무엇인가?

PowerPoint Presentation

05-class.key

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

PowerPoint Presentation

슬라이드 1

제2장객체지향분석과설계

밀크T 사용설명서

[ 프로젝트이름 ] : Project_Car [ 프로젝트를만든목적 ] : 임의의자동차판매소가있다고가정하고, 고객이원하는자동차의각부분을 Java 를이용하여객 체로생성하고, 그것을제어하는메소드를이용하여자동차객체를생성하는것이목표이다. [ 프로젝트패키지와클래스의내용설명 ] [

fundamentalOfCommandPattern_calmglow_pattern_jstorm_1.0_f…

어댑터뷰

PowerPoint Presentation

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

ThisJava ..

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

PowerPoint Template

A Tour of Java V

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

제목

Microsoft PowerPoint - 13_UMLCoding(2010).pptx

JAVA PROGRAMMING 실습 05. 객체의 활용

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

슬라이드 1

슬라이드 1

No Slide Title

Microsoft PowerPoint - lec2.ppt

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

PowerPoint Template

Microsoft PowerPoint - java2 [호환 모드]

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

이것은리스트뷰의 setadapter 메소드에잘표현되어있습니다. setadapter 는리스트뷰에사용할데이터객체를넘겨주는메소드입니다. 일반적으로생각한다면 ArrayAdapter 객체를생성하여사용할데이터를저장할것이고데이터가저장된 ArrayAdapter 객체를 setadapt

PowerPoint Presentation

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

Java Programing Environment

Microsoft PowerPoint - Lect04.pptx

MVVM 패턴의 이해

Transcription:

인터페이스적용 오리객체설계하기 ) 청둥오리, 물오리를설계하세요. 1 단계 : 필요한객체설계 class 청둥오리 { class 물오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck.swim(); mallardduck.fly(); mallardduck.quack(); redheadduck.swim(); redheadduck.fly(); redheddduck.quack();

2 단계 : 추상화 class 오리 { class 청둥오리 extends 오리 { class 물오리 extends 오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck.swim(); mallardduck.fly(); mallardduck.quack(); redheadduck.swim(); redheadduck.fly(); redheddduck.quack();

새로운요구사항의발생 고무인형오리와모형오리를추가하세요. class 고무인형오리 extends 오리 { class 모형오리 extends 오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck. 헤엄친다 (); mallardduck. 난다 (); mallardduck. 운다 (); redheadduck. 헤엄친다 (); redheadduck. 난다 (); redheddduck. 운다 (); 고무인형오리 rubberduck = new 고무인형오리 (); 모형오리 modelduck = new 모형오리 (); rubberduck. 헤엄친다 (); rubberduck. 난다 ();// 문제발생!!! 고무인형오리는날지못한다. rubberduck. 운다 ();// 문제발생!!! 고무인형오리는꽥꽥울지못한다. 삑삑소리가난다. modelduck. 헤엄친다 (); modelduck. 난다 ();// 문제발생!!! 모형오리는날지못한다. modelduck. 운다 ();// 문제발생!! 모형오리는소리내지못한다.

3 단계 : 안터페이스도입 고무인형오리와모형오리가할수없는행위들을인터페이스로설계한다. interface Flyable { void 난다 (); interface Quackable { void 운다 (); class 오리 { class 청둥오리 extends 오리 implements Flyable, Quackable { class 물오리 extends 오리 implements Flyable, Quackbable {

class 고무인형오리 extends 오리 implements FlyBehavior, Quackable { System.out.println(" 삑삑소리낸다. ); System.out.println(" 하늘을날지못한다. ); class 모형오리 extends 오리 implements FlyBehavior, Quackable { System.out.println(" 소리내지못한다. ); System.out.println(" 하늘을날지못한다. ); 오리 mallardduck = new 청둥오리 (); 오리 redheadduck = new 물오리 (); mallardduck. 헤엄친다 (); mallardduck. 난다 (); mallardduck. 운다 (); redheadduck. 헤엄친다 (); redheadduck. 난다 (); redheddduck. 운다 (); 오리 rubberduck = new 고무인형오리 (); 오리 modelduck = new 모형오리 (); rubberduck. 헤엄친다 (); rubberduck. 난다 (); rubberduck. 운다 (); modelduck. 헤엄친다 (); modelduck. 난다 (); modelduck. 운다 ();

기존의설계를상당히많이변경해야한다. 새로운행위가추가될경우새로운인터페이스를도입하고, 모든하위클래스에이를반영해야한다. 이런식의변경은바람직하지않다. 3 단계 : 기존설계에서변경되는부분을분리한다. 변경된행위를정의한다. 객체지형적인설계방침을적용한다. 객체지향적인설계방침 1 : 객체에서달라지는부분을찾아내고, 달라지지않는부분으로부터분리한다. 객체지향적인설계방침 2 : 클래스로구현보다는인터페이스에맞춰서설계한다. 오리에서달라지는부분은난다 () 와운다 () 임을확인한다. interface FlyBehavior { void 난다 (); class 정말난다 implements FlyBehavior { System.out.println(" 진짜로하늘을난다. ); class 날지못한다 implements FlyBehavior { System.out.println(" 하늘을날지는못한다. ); interface QuackBehavior { void 운다 (); class 꽥꽥운다 implements QuackBehavior { class 삑삑운다 implements QuackBehavior { System.out.println(" 삑삑운다. ); class 울지못한다 implements QuackBehavior { System.out.println(" 울지못한다. );

class 오리 { FlyBehavior flybehavior;// 나는행위를 Duck 클래스에포함시킨다. QuackBehavior quackbehavior;// 우는행위를 Duck 클래스에포함시킨다. quackbehavior. 운다 ();// 더이상 Duck 객체가직접우는행위는하지않는다. // 이행위는변경되는부분이므로, // 구체적으로변경된우는행위를하는객체의행위로대신한다. flybehavior. 난다 ();// 더이상 Duck 객체가직접나는행위를하지않는다. // 이행위는변경되는부분이므로, // 구체적으로변경된나는행위를하는객체의행위로대신한다. class 청둥오리 extends 오리 { 청둥오리 () { quackbehavior = new 꽥꽥운다 ();// 우는행위를설정 flybehavior = new 정말난다 ();// 나는행위를설정 class 물오리 extends 오리 { 물오리 () { quackbehavior = new 꽥꽥운다 ();// 우는행위를설정 flybehavior = new 정말난다 ();// 나는행위를설정 class 고무인형오리 extends 오리 { 고무인형오리 () { quackbehavior = new 삑삑운다 ();// 우는행위를설정 flybehavior = new 날지못한다 ();// 나는행위를설정

class 모형오리 extends 오리 { 모형오리 () { quackbehavior = new 울지못한다 ();// 우는행위를설정 flybehavior = new 날지못한다 ();// 나는행위를설정 오리 mallardduck = new 청둥오리 (); 오리 redheadduck = new 물오리 (); mallardduck. 헤엄친다 (); mallardduck. 난다 (); mallardduck. 운다 (); redheadduck. 헤엄친다 (); redheadduck. 난다 (); redheddduck. 운다 (); 오리 rubberduck = new 고무인형오리 (); 오리 modelduck = new 모형오리 (); rubberduck. 헤엄친다 (); rubberduck. 난다 ();// 오리처럼나는행위는있지만, 사실상날지못하는기능의나는행위임. rubberduck. 운다 ();// 오리처럼우는행위는있지만, 사실상삑삑소리내는기능의우는행위임. modelduck. 헤엄친다 (); modelduck. 난다 ();// 오리처럼나는행위는있지만, 사실상날지못하는기능의나는행위임. modelduck. 운다 ();// 오리처럼우는행위는있지만, 사실상아무소리도못내는기능의우는행위임.

새로운요구사항의발생 로케트추진장난감오리를추가하세요. 새로운나는형태인 로케트추진 은하늘을나는행위의일종이므로 FlyBehavior의하위클래스로구현한다. class 로케트로난다 implements FlyBehavior { System.out.println(" 로케트추진으로난다. ); 로케트추진장난감오리의생성자에서 울지못하는 행위와 로케트추진으로나는 행위를설정한다. class 로케트추진오리 extends 오리 { 로케트추진오리 () { flybehavior = new 로케트로난다 (); quackbehavior = new 울지못한다 (); 오리 mallardduck = new 청둥오리 (); 오리 redheadduck = new 물오리 (); mallardduck. 헤엄친다 (); mallardduck. 난다 (); mallardduck. 운다 (); redheadduck. 헤엄친다 (); redheadduck. 난다 (); redheddduck. 운다 (); 오리 rubberduck = new 고무인형오리 (); 오리 modelduck = new 모형오리 (); rubberduck. 헤엄친다 (); rubberduck. 난다 (); rubberduck. 운다 (); modelduck. 헤엄친다 (); modelduck. 난다 (); modelduck. 운다 (); 오리 rocketpoweredduck = new 로케트추진오리 (); rocketpoweredduck. 헤엄친다 (); rocketpoweredduck. 난다 ();// 오리처럼나는행위는있지만, 사실상로케트로나는행위임 rocketpoweredduck. 운다 ();// 오리처럼우는행위는있지만, 사실상아무소리도못내는행위임.