Microsoft PowerPoint - java2 [호환 모드]

Similar documents
Microsoft PowerPoint - chap11

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

JAVA PROGRAMMING 실습 08.다형성

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

PowerPoint Presentation

No Slide Title

Microsoft PowerPoint - 2강

쉽게 풀어쓴 C 프로그래밍

C++ Programming

PowerPoint Presentation

PowerPoint 프레젠테이션

01-OOPConcepts(2).PDF

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

JAVA PROGRAMMING 실습 07. 상속

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Design Issues

PowerPoint Presentation

Microsoft PowerPoint - java1 [호환 모드]

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

PowerPoint Presentation

PowerPoint Template

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

PowerPoint 프레젠테이션

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

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

Slide 1

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint Template

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

JAVA PROGRAMMING 실습 02. 표준 입출력

슬라이드 1

PowerPoint Presentation

Microsoft PowerPoint - Lect04.pptx

제11장 프로세스와 쓰레드

PowerPoint Presentation

C++ Programming

Network Programming

C++ 기본문법 정리

PowerPoint Presentation

설계란 무엇인가?

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

JVM 메모리구조

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

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

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

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

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

PowerPoint Presentation

Microsoft PowerPoint 장강의노트.ppt

PowerPoint Presentation

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

PowerPoint Presentation

05-class.key

PowerPoint Template

Java ~ Java program: main() class class» public static void main(string args[])» First.java (main class ) /* The first simple program */ public class

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

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

슬라이드 1

Microsoft PowerPoint - 04-UDP Programming.ppt

09-interface.key

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

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Semantic Consistency in Information Exchange

Spring Boot/JDBC JdbcTemplate/CRUD 예제

JAVA PROGRAMMING 실습 09. 예외처리

Cluster management software

PowerPoint Presentation

Microsoft PowerPoint - Chapter 6.ppt

객체 Key Point 객체는그객체의특성을나타내는상태 (state) 와그객체의행동 (behaviors) 으로이루어진다. 좌표상의점 n 상태 : x 좌표값, y 좌표값 n 행동 : 점의이동 주사위 n 상태 : 표면값 n 행동 : 주사위굴리기 은행계좌 n 상태 : 예금주,

1

PowerPoint 프레젠테이션

No Slide Title

PowerPoint Presentation

Microsoft PowerPoint - C++ 5 .pptx

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

비긴쿡-자바 00앞부속

Microsoft PowerPoint - Java7.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - 04_OOConcepts(2010).pptx

제목

5장.key

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

C++ Programming

슬라이드 1

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

chap10.PDF

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

Slide 1

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

쉽게 풀어쓴 C 프로그래밍

Blog

Slide 1

Transcription:

10 장객체- 지향프로그래밍 II 창병모 1

상속 창병모 2

상속 (Inheritance) 상속이란무엇인가? 기존의클래스로부터새로운클래스를유도하는것 자식클래스는부모클래스의메쏘드와데이터를상속 자식클래스에새로운변수나메쏘드를추가할수있다. 기존클래스 부모클래스 (parent class), 수퍼클래스 (superclass), 기반클래스 (base class) 유도클래스 자식클래스 (child class), 서브클래스 (subclass) 창병모 3

상속 상속관계표시 UML 클래스다이어그램 자식으로부터부모로의화살표 Vehicle Car is-a 관계 (relationship) 자식이부모의보다구체적인버전이다. the child is a more specific version of the parent 창병모 4

상속 상속은왜하나? 소프트웨어재사용 (Software reuse) 기존의소프트웨어컴포넌트를사용해서새로운클래스생성 기존소프트웨어를재사용함으로써기존소프트웨어에들인모든노력을재사용 창병모 5

서브클래스유도 예약어 extends 를사용한다. class Car extends Vehicle { } // class contents 단일상속 (single inheritance) 만을지원 하나의슈퍼클래스로부터상속받음 창병모 6

예 : Book/Dictionary 창병모 7

창병모 8

protected 조정자 전용 (private) 가시성을갖는멤버 자식클래스내에서직접접근할수없다. 공용 (public) 가시성을갖는멤버 자식클래스뿐만아니라프로그램내어디서나접근가능 공용변수는캡슐화원리를위반 protected t 멤버 상속상황을위한제 3 의가시성 공용가시성보다는더캡슐화하고전용보다는덜캡슐화한다. 자식클래스가직접접근할수있다. 창병모 9

상속과 protected 조정자 protected 는왜필요한가? 나와내자식들만을위한것 public 으로한다면어떻게될까? private으로한다면어떻게될까? C++ 의 protected 자식클래스에서접근 / 사용가능 protected 멤버는자식에상속된다. Java 의 protected 자식클래스에서접근 / 사용가능 같은패키지내에서접근 / 사용가능 Protected 멤버는자식에상속된다. 창병모 10

상속과가시성조정자 상속시가시성 부모클래스 public protected private 자식클래스 public protected inaccesible 창병모 11

메쏘드재정의 창병모 12

메쏘드재정의 (overriding) 메쏘드재정의란무엇인가? 자식클래스가상속된메쏘드를자신이원하는대로재정의하는것 새로운메쏘드는부모메쏘드와이름과서명 (signature) 이같아야한다. 메쏘드의서명 (signature) 메쏘드의매개변수이름, 개수, 순서, 타입 재정의된메쏘드실행 그메쏘드를실행하는객체의타입에따라호출될메쏘드가결정된다. 창병모 13

메쏘드재정의 : 예 class Fruit { int grams; int cals_per_gram; } int total_calories( ) { /* */ } void peel( ) { System.out.print( peel a Fruit ); } class Lemon extends Fruit { void squeeze( ) { /* */ } // Fruit 클래스의 peel() 메쏘드를 Lemon 클래스가재정의 void peel( ) { super.peel(); System.out.println(, t tl which h is a lemon ); } } 창병모 14

메쏘드재정의 : 예 class Example { public static void main(string args[]) { Fruit fruit = new Fruit(); Lemon lemon = new Lemon(); fruit.peel(); lemon.peel(); } } fruit = lemon; fruit.peel(); 창병모 15

중복정의 vs. 재정의 중복정의 한클래스내에같은이름의여러개의메쏘드로 서로다른서명을갖는경우 비슷한연산을다른매개변수에대해서다른방식으로정의하는데사용 재정의 부모클래스의메쏘드를자식클래스가재정의 서명이같아야한다. 시그너처가다르다면어떻게될까? 창병모 16

super 참조 super 는슈퍼클래스를지칭하는참조 슈퍼클래스의멤버필드나메소드를지칭할때사용 super.field super.method() super() super() 는슈퍼클래스의생성자를호출 super() 는생성자의맨처음부분에위치 서브클래스생성자에서슈퍼클래스의생성자를호출 창병모 17

다형성 (Polymorphism) 창병모 18

바인딩 (Binding) 바인딩이란무엇인가? 이름이가리키는대상을결정하는것 obj.doit(); 이호출은호출될메쏘드를결정즉바인딩한다. 컴파일시간에결정하면언제나같은메쏘드가호출될것이다. 동적바인딩 (dynamic binding) 그러나 Java 는동적바인딩을한다 runtime binding, late binding 이라고도한다. 왜동적바인딩을하는가? 프로그램설계에유연성을제공한다. 창병모 19

다형성 (Polymorphism) 다형성 (polymorphism) 의의미 많은형태를갖는다. "having many forms 다형참조 (polymorphic reference) 변수 때에따라다른타입의객체를참조할수있다. 다형참조를통해호출된메쏘드는호출할때마다다를수있다. Java 에서모든객체참조는다형적일수있다. 창병모 20

다형참조 객체참조변수 선언된클래스의객체와 선언된클래스의자손클래스의객체를참조할수있다. 예 : Fruit fruit; Fruit Lemon if ( ) fruit = new Fruit(); else fruit = new Lemon(); fruit.peel(); 창병모 21

동적바인딩 호출될메쏘드결정 참조변수의타입이아니고 실행시간에참조되고있는객체의타입에의해결정된다. fruit.peel(); fruit 가 Fruit 객체를참조하는경우 Fruit peel() Fruit 의 peel 호출 fruit 가 Lemon 객체를참조하는경우 Lemon 의 peel 호출 Lemon peel() 창병모 22

클래스설계 창병모 23

클래스설계는어떻게? 좋은클래스설계는어떤것일까? 가능하면공통적인것들은상부에위치하는것이좋다. 왜? 클래스계층구조는변화에따라확장혹은수정된다. 모든상황에맞는좋은클래스계층구조는없다. 창병모 24

상속을위한설계 상속은객체 - 지향설계에서중요한부분이다 시간을투자해서좋은소프트웨어설계를하면장기적으로득이된다. 적절하게설계된상속관계는소프트웨어의품격, 유지성, 재사용에크게기여할수있다. 좋은소프트웨어설계와관련된몇가지문제들을요약해보자. 창병모 25

상속을통한다형성 한부모의자식클래스가다른클래스의부모클래스가되어계층구조형성 StaffMember 계층구조 StaffMember Volunteer Employee Executive Hourly 창병모 26

클래스계층구조 형제클래스 (siblings) 같은부모의자식클래스들 클래스계층구조어떻게만들것인가? 클래스계층구조에서공통적인기능들을가능하면높이위치시킨다. 상속된멤버들은계속해서아래로상속된다. 따라서자식클래스는모든조상클래스들로부터상속받는다. 모든상황에적절한클래스계층구조는없다. 창병모 27

Object 클래스 Object 클래스 Object 클래스는모든클래스계층구조에서궁극적인루트 Java 표준라이브러리의 java.lang 패키지에정의되어있다. 모든클래스는 Object 클래스로부터상속받는다. 부모를선언하지않으면 Object 클래스의자식클래스가된다. Object 클래스가포함한유용한메쏘드 tostring() equals() 창병모 28

추상클래스 창병모 29

추상클래스 (Abstract Class) 추상클래스란무엇인가? 포괄적인개념을표현하기위한클래스로아직덜구현된클래스 추상메쏘드를포함한클래스를보통추상클래스로정의한다. 추상메쏘드가아닌완전히구현된메쏘드도포함가능 추상클래스는실체화될수없다. abstract 조정자사용 public abstract class Product { } abstract method1(); method2() { } // contents 창병모 30

추상클래스 자식클래스가부모클래스의추상메쏘드를구현한다. 구현하지않으면자식클래스도여전히추상클래스가된다. 추상메쏘드는 final 이나 static 으로선언하면안됨 추상클래스용도 클래스계층구조에서실체화하기에너무포괄적인공통요소들을 계층구조에위치시킬수있도록해준다. 창병모 31

추상클래스 : 예 창병모 32

Volunteer.java 창병모 33

창병모 34

인터페이스 창병모 35

인터페이스 (interface) 설계할클래스들에대한명세 (specification) 인터페이스 추상메쏘드와상수만으로구성된다. abstract 키워드는필요없다. 창병모 36

추상클래스와인터페이스 차이점 추상클래스는일부메소드는구현 인터페이스는전혀구현되어있지않음 상속관련차이점 추상클래스를이용하는경우에는단일상속만지원 인터페이스는다중상속 (multiple inheritance) 가능 창병모 37

인터페이스 (interface) interface is a reserved word None of the methods in an interface are given public interface Doable a definition (body) { public void dothis(); public int dothat(); public void dothis2 (float value, char ch); public boolean dotheother (int num); } A semicolon immediately follows each method header 창병모 38

인터페이스 인터페이스를구현한클래스 모든추상메쏘드를구현해야한다. implements class class-name implements interface-name { } 인터페이스내의메쏘드 모두 public and abstract 인터페이스로부터객체생성불가! 창병모 39

인터페이스 public class CanDo implements Doable { public void dothis () implements is a { reserved word // whatever } public void dothat () { // whatever } Each method listed in Doable is given a definition // etc. } 창병모 40

인터페이스 : 예 예 )DrawableCircle 창병모 41

인터페이스 : 예 예제 : Drawable.java 1 import java.awt.graphics; 2 3 interface Drawable { 4 void paint(graphics g); 5 } 예제 : DrawableCircle.java 1 import java.awt.*; 2 3 class DrawableCircle extends Circle implements Drawable { 4 protected int x, y; 16 public void paint(graphics g) { 17 g.drawoval(x-r, y-r, 2*r, 2*r); 18 } 19 } 창병모 42

예제 : DrawApplet.java 1 import java.awt.*; awt 2 import java.applet.*; 3 4 public class DrawApplet extends Applet { 5 Drawable drawable[]; 6 7 public void init() { 8 drawable = new Drawable[3]; 9 drawable[0] = new DrawableCircle(45, 45, 30); 10 drawable[1] = new DrawableRectangle(25, 25, 40, 65); 11 drawable[2] = new DrawableCircle(90, 70, 60); 12 } 13 14 public void paint(graphics g) { 15 int n = drawable.length; 16 for(int i=0; i< n; i++) { 17 drawable[i].paint(g); 18 }.. 창병모 43

인터페이스특성 인터페이스의멤버필드는디폴드로 static, final 로선언 값을변경하려는시도는컴파일시에에러를발생 인터페이스를구현한클래스는인터페이스의멤버필드를사용할수있다. 인터페이스사이의상속가능 클래스와마찬가지로키워드 extends 를사용 interface ScaledDrawable extends Drawable{..} 창병모 44

C++ 창병모 45

C++ : 상속 class B { public: int x; char f(); B(); } class D: public B { int x; int g(); } // D derived from B // D::x is added, B::x is inherited // added member function 창병모 46

C++ : Public 상속 구문 class <derived> : public <base> { } <member-declarations> 자식클래스에서가시성 부모클래스 public protected private 자식클래스 public protected inaccesible 창병모 47

C++: Private 상속 상속된멤버는자식클래스에서전용 (private) 이된다. class <derived> : private <base> { <member-declarations> } 상속된멤버의가시성 부모클래스 public protected private 자식클래스 private private inaccesible 창병모 48

C++ : Virtual 함수 C++ 의가상함수 (virtual function) 자식클래스에서재정의될수있는함수 모든 java 메쏘드는 virtual!! C++ 의순수가상함수 (pure virtual function) Java 의추상메쏘드 (abstract method) 자식클래스에서정의되는함수 가상함수호출 객체에타입에따라동적바인딩된다. 창병모 49

C++ : 동적바인딩 class A { public: void p() { cout << A::p\n ; } virtual void q() { cout << A::q\n ;} void f() { p(); q(); } } class B: public A { public: void p() { cout << B::p\n ; } void q() { cout << B::q\n ; } } 창병모 50

C++ : 동적바인딩 main() { A a; B b; a.f(); b.f(); a = b; a.f(); } main() { A *a =newa; B *b = new B; a->f(); b->f(); a = b; a->f(); } 창병모 51

구현 창병모 52

객체구현 객체는구조체 ( 레코드 ) 처럼메모리가할당된다. 각실체변수에대한메모리할당. 동적바인딩 가상메쏘드테이블 (Virtual method table) 이용 각객체는이테이블에대한포인터를갖는다. 접근가능성검사 접근가능성검사는컴파일시간에이루어진다. 창병모 53

메쏘드테이블 (Method Table) 메쏘드테이블 각클래스마다메쏘드테이블이하나씩있다. 클래스의모든가상메쏘드는하나의인덱스를갖는다. 각인덱스의내용은해당메쏘드코드의주소 메쏘드호출구현 대상객체의메쏘드테이블포인터를따라간다. 해당인덱스의메쏘드주소를따라간다. 그주소로점프한다. 창병모 54

메쏘드테이블 상속과재정의 서브클래스는수퍼클래스의메쏘드테이블을상속받는다. 메쏘드가재정의되면, 해당메쏘드테이블을갱신하다. 창병모 55

클래스와메쏘드테이블 class A { int foo() { } address of foo() 0 void bar() { } address of bar() 1 }; Method table of A class B extends A { int foo() { } float boo() { } }; address of foo() 0 address of bar() 1 address of boo() 2 Method table of B 창병모 56

메쏘드호출예 A a = new A(); a.foo();. a = new B(); a.foo(); a.bar();. Object reference Objects Method tables variable 0 address of foo() a new A( ) Data 1 address of bar() new B( ) 0 address of foo() Data 1 address of bar() 2 address of boo() 창병모 57