슬라이드 1

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

JAVA PROGRAMMING 실습 08.다형성

슬라이드 1

Microsoft PowerPoint - 2강

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

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

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

PowerPoint 프레젠테이션

슬라이드 1

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

JAVA PROGRAMMING 실습 07. 상속

PowerPoint Presentation

No Slide Title

제11장 프로세스와 쓰레드

PowerPoint 프레젠테이션

예제 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

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

C++ Programming

PowerPoint Presentation

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 05. 객체의 활용

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µå

PowerPoint Presentation

PowerPoint 프레젠테이션

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

슬라이드 1

PowerPoint Presentation

Design Issues

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

PowerPoint Template

Microsoft PowerPoint - Lect04.pptx

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint - additional08.ppt [호환 모드]

유니티 변수-함수.key

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Network Programming

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

슬라이드 1

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

쉽게 풀어쓴 C 프로그래밍

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

Microsoft PowerPoint - Chapter 6.ppt

Slide 1

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Chapter 6 Objects and Classes

PowerPoint Presentation

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

Microsoft PowerPoint - 13_UMLCoding(2010).pptx

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

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

Microsoft PowerPoint - chap11

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

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - CSharp-10-예외처리

슬라이드 1

PowerPoint Presentation

Microsoft PowerPoint - Chap12-OOP.ppt

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

PowerPoint 프레젠테이션

소프트웨어공학개론 강의 5: 객체지향개념 최은만동국대학교컴퓨터공학과

PowerPoint Presentation

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint 장강의노트.ppt

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft Word - java19-1-midterm-answer.doc

Slide 1

PowerPoint Template

Microsoft PowerPoint - java2 [호환 모드]

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 09. 예외처리

C++ Programming

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

JAVA PROGRAMMING 실습 05. 객체의 활용

Cluster management software

PowerPoint Presentation

No Slide Title

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

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

설계란 무엇인가?

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - additional07.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드]

오버라이딩 (Overriding)

PowerPoint Template

01-OOPConcepts(2).PDF

슬라이드 1

Microsoft PowerPoint - lec08_1311.ppt [호환 모드]

Microsoft PowerPoint - 04_OOConcepts(2010).pptx

Transcription:

7 장. 상속과다형성 학습목표 상속에대해알아봅니다. 상속과클래스계층구조 메소드오버라이딩

객체마을에서의더나은삶 여러분도다형성계획에참여해보세요.

다시보는의자전쟁 1. 네클래스에공통적으로들어있는것을찾아낸다. Square Circle Triangle Amoeba rotate() rotate() rotate() rotate() playsound() playsound() playsound() playsound()

다시보는의자전쟁 2. 모두도형이고회전 (rotate()) 및사운드재생 (playsound()) 기능이있으므로공통적인기능을모두뽑아서 Shape 이라는클래스를만든다. Shape rotate() playsound()

다시보는의자전쟁 상위클래스 (superclass) - 추상적 Shape rotate() playsound() 3. 나머지도형클래스네개를상속이라는관계로 Shape 클래스와연관시킴 하위클래스 (subclass) - 구체적 Square Circle Triangle Amoeba

다시보는의자전쟁 아메바의메소드는어떻게처리할수있을까요? Shape rotate() playsound() 오버라이드 서브클래스 (subclass) Amoeba Square Circle Triangle Amoeba rotate() { // 아메바전용 // 회전코드 } playsound() { } // 아메바전용 // 사운드재생코드

상속의이해 상위클래스 ( 더추상적임 ) SuperHero suit tights specialpower usespecialpower() putonsuit() 인스턴스변수 ( 상태 ) 메소드 ( 행동 ) 하위클래스 ( 더구체적임 ) FriedEggMan PantherMan usespecialpower() 오버라이드하는메소드 putonsuit()

상속의예 public class Doctor { boolean worksathospital; void treatpatient() { // 진료를합니다. } } 의대를가지않아도상속받기만하면됩니다. public class FamilyDoctor extends Doctor { boolean makehousecalls; void giveadvice() { } } // 집에서필요한조언을합니다. public class Surgeon extends Doctor { } void treatpatient() { } // 외과수술을합니다. void makeincision() { } // 살을쨉니다.

연필을깎으며 Doctor worksathospital treatpatient() 인스턴스변수한개 메소드한개 Surgeon treatpatient() makeincision() FamilyDoctor makehousecalls giveadvice() Surgeon에들어있는인스턴스변수의 FamilyDoctor 개수는에? 들어있는인스턴스 Doctor에변수의있는개수는메소드? 개수는? Surgeon에들어있는메소드 FamilyDoctor 개수는? 에들어있는메소드 FamilyDoctor 개수는? 에서 treatpatient() FamilyDoctor를에서실행할수있을까요 makeincision()? 을실행할수있을까요?

동물시뮬레이션을위한상속트리설계 1. 공통적인속성과행동이들어있는객체를찾아봅시다.

상속을활용한설계 2. 공통적인상태와행동을나타내는클래스를설계합니다. Lion Animal picture food hunger boundaries location makenoise() eat() sleep() roam() Dog Cat Wolf Hippo Tiger

메소드오버라이딩 3. 특정하위클래스유형에서만적용되는행동이필요한지결정합니다. Animal 클래스에서는각하위클래스의 eat() 과 makenoise() 를오버라이드해야한다는결론을내릴수있습니다. 전엄청나게많이먹어대죠. 짖는소리는우리의개성의척도라고할수있죠. picture food hunger boundaries location makenoise() eat() sleep() roam Animal

추상화개념의확장 4. 공통적인행동이필요한하위클래스를두개이상찾아서추상화의개념을더폭넓게활용할수있을지찾아봅니다. 여러클래스를살펴보면 Wolf 와 Dog 에공통적인행동이있고 Lion, Tiger, Cat 에도공통적인행동이있다는것을알수있습니다.

추상화개념의확장 Lion Animal picture food hunger boundaries location makenoise() eat() sleep() roam Dog Cat Wolf Hippo Tiger

Animal picture RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line food 5. 클래스계층구조를완성해봅시다. hunger boundaries location makenoise() eat() sleep() roam Feline roam() Hippo Canine Lion roam() Cat Dog Wolf Tiger

어떤메소드가호출될까요? Animal 새로운 Wolf 객체를만듭니다. Wolf 에있는버전을호출합니다. Wolf w = new Wolf(); w.makenoise(); makenoise() eat() sleep() roam() Canine 에있는버전을호출합니다. w.roam(); Wolf 에있는버전을호출합니다. w.eat(); Animal 에있는버전을호출합니다. w.sleep(); roam() Canine 객체레퍼런스에대해메소드를호출하면그객체유형의메소드중에서가장구체적인버전이호출됩니다. Wolf makenoise() eat()

상속트리설계 클래스상위클래스하위클래스 옷 옷 바지, 셔츠 바지 옷 서츠 옷 바지 셔츠 상속테이블 상속클래스다이어그램

바보같은질문은없습니다. 메소드를호출한클래스유형에서시작해서상속트리를따라올라간다고했는데 JVM 에서매치되는것을전혀찾을수없으면어떻게되나요? 그런문제는일어나지않습니다. 컴파일러에서원천적으로차단하기때문이죠. 어떤클래스에서메소드를상속한다면그메소드가반드시있는지확인하고넘어갑니다. JVM 에서는항상올바른메소드를호출합니다.

A는 B다 테스트 삼각형 (Triangle) 은도형 (Shape) 이다. 고양이 (Cat) 는고양이과 (Feline) 이다. 외과의사는의사이다. 욕조는화장실이다? Bathroom Tub bathtub; Sink thesink; Tub int size; Bubbles b; Bubbles int radius; int coloramt;

A는 B다 테스트 상속트리를제대로설계했다면어떤하위클래스에대해서도 하위클래스는상위클래스이다 라는관계가성립합니다. B 라는클래스가 A 라는클래스를확장하면 B 클래스는 A 클래스입니다. C 라는클래스가 B 라는클래스를확장하면 C 클래스는 B 클래스이며, 또한 A 클래스이기도합니다. Animal makenoise() eat() sleep() roam() roam() Canine Wolf makenoise() eat()

바보같은질문은없습니다. 상위클래스에서하위클래스의메소드를쓰고싶을때는어떻게해야하나요? 상위클래스에서는하위클래스에대해알필요가없습니다. 부모가자식으로부터상속을받는일이없는것처럼상위클래스에서하위클래스의메소드를만들수는없습니다.

바보같은질문은없습니다. 하위클래스에서상위클래스에있는버전의메소드와새로오버라이드한버전의메소드를모두사용하고싶다면어떻게해야할까요? super 라는키워드를사용하면됩니다. public void roam() { super.roam(); // 새로추가할내용 }

네가지접근단계 private default protected public public 상속됩니다. private 상속되지않습니다. private int AccountNum; public void roam() { }

상속트리설계시주의할점 어떤클래스가다른클래스 ( 상위클래스 ) 를더구체화한유형이라면상속을활용합니다. 버드나무 나무 자동차 승용차 같은일반적인유형에속하는여러클래스에서공유해야하는어떤행동이있다면상속을활용합니다. Square, Circle, Triangle Shape

핵심정리 하위클래스는상위클래스를확장합니다. 하위클래스는상위클래스에있는모든 public 으로지정한인스턴스변수와메소드를상속합니다. private 으로지정한변수와메소드는상속하지않습니다. 메소드는오버라이드할수있지만인스턴스변수는오버라이드할수없습니다. A는 B다 테스트를활용하여상속계층이올바른지확인합시다. A 는 B 다 관계는한방향으로만작동합니다. 하위클래스에서메소드를오버라이드하면, 그리고하위클래스의인스턴스에대해그메소드를호출하면오버라이드된버전의메소드가호출됩니다. B 라는클래스가 A 라는클래스를확장하고 C 는 B 를확장한다면 B 는 A 이고 C 는 B 이면서또한 A 가됩니다.

상속을활용할때의장점 코드가중복되는것을방지할수있습니다. 공통적인코드를한군데모아놓고하위클래스에서상위클래스로부터상속을받을때그코드도받게합니다. 행동을변경하고싶으면한군데만변경하면나머지모든하위클래스에서변경된기능을활용할수있습니다. 일련의클래스를위한공통적인규약 (protocol) 을정의합니다.

상속을통한규약정의 상위클래스에서메소드를정의하면그메소드는하위클래스로상속될수있으며그메소드정의는일종의규약이라고할수있습니다. Animal makenoise() eat() sleep() roam() 모든 Animal 객체에서여기있는것과같은네가지일을할수있다는것을공표합니다.

객체선언및대입과정 Dog mydog = new Dog(); 1. 레퍼런스변수선언 Dog mydog = new Dog(); mydog Dog

객체선언및대입과정 Dog mydog = new Dog(); 2. 객체생성 Dog mydog = new Dog(); Dog 객체

객체선언및대입과정 Dog mydog = new Dog(); 3. 객체와레퍼런스연결 Dog mydog = new Dog(); mydog Dog 객체 Dog

객체선언및대입과정 레퍼런스유형과객체유형이똑같아야합니다. Dog 객체 mydog Dog

다형성활용 Animal mydog = new Dog(); Dog 객체 mydog Animal

다형성활용 다형성을사용하면레퍼런스유형을실제객체유형의상위클래스유형으로지정할수있습니다. Animal animals = new Animal[5]; animals[0] = new Dog(); animals[1] = new Cat(); animals[2] = new Wolf(); animals[3] = new Hippo(); animals[4] = new Lion(); for (int i = 0; i < animals.length; i++) { animals[i].eat(); animals[i].roam(); }

다형적인인자, 리턴유형 인자와리턴유형에대해서도다형성을적용할수있습니다. class Vet { public void giveshot(animal a) { // a 매개변수가가리키는 Animal 객체에 // 주사를놓습니다. a.makenoise(); } } a

다형적인인자, 리턴유형 class PetOwner { public void start() { Vet v = new Vet(); Dog d = new Dog(); Hippo h = new Hippo(); v.giveshot(d); v.giveshot(h); } } 하위클래스를새로만들더라도코드를바꿀필요가없습니다.

바보같은질문은없습니다. 하위클래스의단계에실질적인제한이있나요? 얼마나깊이들어갈수있어요? 그런제한이따로정해져있지는않습니다. 프로그래밍을하다보면상속트리를얕게만드는게좋다는것을자연스럽게깨달을수있을것입니다.

바보같은질문은없습니다. 소스코드를직접고칠수없는데메소드작동방식을바꾸고싶을때하위클래스를만들어서그렇게할수있나요? 물론가능합니다. 그리고 OO 의장점가운데하나라고할수있습니다. 클래스를완전히새로만들거나누가그클래스를처음만들었는지찾아내는것보다는훨씬쉬운방법이죠.

바보같은질문은없습니다. 아무클래스나확장할수있나요? 아니면클래스멤버와마찬가지로클래스를 private 로지정하면상속할수없다던가하는제한이있나요? 내부클래스를제외하면 private 으로지정하거나하는식으로상속을할수없는클래스를만드는방법은없습니다. 하지만하위클래스를만들수없도록하는방법은있습니다. 클래스를 public 으로선언하지않는방법 final 변경자를쓰는방법 클래스생성자를모두 private 으로지정하는방법

바보같은질문은없습니다. 굳이하위클래스를만들지못하게하는이유가있나요? 보안상의이유때문에종종그렇게하기도합니다. 여러분이직접만든클래스에대해 final 변경자를쓰는일은없겠지만 String 같은클래스의경우에는보안상의문제때문에 final 로지정되어있습니다.

바보같은질문은없습니다. 하위클래스는만들수있도록하면서메소드만오버라이드할수없도록하는방법도있나요? 메소드에만 final 변경자를사용하면됩니다. 클래스에있는모든메소드를오버라이드할수없도록하고싶다면클래스자체를 final 로지정해도됩니다.

오버라이드규칙 오버라이드하는메소드의인자와리턴유형은외부에서보기에상위클래스에있는메소드와완벽하게일치해야합니다. Appliance boolean turnon() boolean turnoff() Appliance public boolean turnon() public boolean turnoff() Toaster boolean turnon(int level) Toaster private boolean turnon()

메소드오버로딩 오버로딩 (Overloading) 이름이같고인자목록은다른메소드를두개이상만드는것 같은메소드를여러다른버전으로만들수있습니다. 1. 리턴유형이달라도됩니다. 2. 리턴유형만바꿀수는없습니다. 3. 접근단계를바꿔도됩니다.

오버로딩의예 public class Overloads { String uniqueid; public int addnums(int a, int b) { return a + b; } public double addnums(double a, double b) { return a + b; } public void setuniqueid(string theid) { // 여러검증과정후에다음을실행 uniqueid = theid; } } public void setuniqueid(int ssnumber) { String numstring = + ssnumber; setuniqueid(numstring); }

숙제 본문을다시한번꼼꼼히읽어봅시다. 본문및맨뒤에나와있는연습문제를직접풀어봅시다.