• 검색 결과가 없습니다.

상속과 다형성

N/A
N/A
Protected

Academic year: 2022

Share "상속과 다형성"

Copied!
50
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

상속과 다형성

(2)

단원 06 상속과 다형성

❖ 객체지향의 특징인 상속에 대해 이해하고 프로그래밍에 활용할 수 있다.

• 클래스 간의 상속 관계를 구현

• 키워드 this와 super,

• 상위 생성자의 호출 super()

• 접근 지정자 public protected default private의 활용

❖ 객체지향의 특징인 다형성에 대해 이해하고 프로그래밍에 활용할 수 있다.

• 참조형에서 변환 연산인 업 캐스팅과 다운 캐스팅

• 객체 확인 연산자 instanceof

• 하위 클래스에서 상위 클래스의 메소드를 재정의하는 메소드 오버라이딩의 이해

• 메소드 오버라이딩의 동적 바인딩 이해

❖ 추상 클래스와 인터페이스를 이해하고 프로그래밍에 활용할 수 있다.

• 추상 클래스의 의미와 구현

• 추상 메소드의 필요성과 구현

• 인터페이스의 의미와 구현

• 인터페이스의 필요성과 구현

2

(3)

단원 06 상속과 다형성 3

1. 상속

(4)

단원 06 상속과 다형성

상속과 개념과 사례

❖ 상속(inheritance)

하위 클래스는 상위 클래스의 특징인 필드와 메소드를 그대로 물려받을 수 있는 특 성

차량, 자전거, 자동차, 기차를 클래스로 표현

이들 클래스 간의 계층 구조에서 상속이라는 특징을 파악

하위인 자전거와 자동차 그리고 기차는 상위인 차량이라는 특성을 모두 물려 받을 수 있

4

(5)

단원 06 상속과 다형성

키워드 extends(1)

[A 는 B이다]는 [이다 관계(is-a relationship)]가 성립

B는 상위클래스, A는 하위 클래스 관계로 규정

하위 클래스는 상위 클래스의 필드와 메소드를 상속받을 수 있는 특징

❖ 즉 [자동차는 차량이다]가 성립

차량에 정의될 수 있는 필드와 메소드는 모두 자동차에서 상속받을 수 있음

상위 클래스

슈퍼super 클래스 또는 부모parent 클래스, 기본base 클래스

하위 클래스

서브sub 클래스 또는 자식child 클래스, 유도derived 클래스

5

(6)

단원 06 상속과 다형성

키워드 extends(2)

하위_클래스이름 extends 상위_클래스이름

모든 클래스의 최상위는 Object라는 클래스

6

(7)

단원 06 상속과 다형성

상위 클래스의 필드와 메소드를 상속

❖ 하위 클래스

상위 클래스의 멤버인 필드와 메소드를 다시 구현 없이 사용

7

(8)

단원 06 상속과 다형성

실습예제 6-1, 6-2

❖ 차량을 위한 클래스

❖ 차량의 하위 클래스인 자동 차를 위한 클래스

8

(9)

단원 06 상속과 다형성

자기 자신과 상위 객체의 구분

❖ this 와 super

this는 객체 자신을 의미하는 키워드

마찬가지로 super는 상위 객체를 의미하는 키워드

9

(10)

단원 06 상속과 다형성

실습예제 6-3

❖ 차량의 하위 클래스인 자동차를 위한 클래스

10

(11)

단원 06 상속과 다형성

상위 생성자 호출

❖ 생성자 구현 첫 줄에서의 super( )

super()는 상위 클래스의 기본 생성자를 호출하는 문장

생성자의 첫 줄에서

상위 생성자를 호출하는 super() 또는 super(…)를 명시적으로 호출하지 않는다면

첫 줄에서 무조건 자동으로 super()를 호출

자동으로 사용되는 기본 생성자의 첫 줄은 무조건 super()를 호출

11

(12)

단원 06 상속과 다형성

상위 객체가 먼저 생성

❖ 생성자 호출에 의해 객체가 생성될 때

항상 상위 객체를 위한 필드와 메소드가 먼저 생성된 후

하위 객체가 생성

12

(13)

단원 06 상속과 다형성

상위 클래스에서 기본 생성자 구현의 중요성

13

❖ 사용자가 직접 구현하는 생성 자에서 첫 줄

상위 생성자의 호출인 super() 또는 super(인자) 가 아니면

자동으로 기본 생성자 super()를 호출

이 때 상위 클래스에서 기본 생성자를 사용할 수 없다면 문법 오류가 발생

(14)

단원 06 상속과 다형성

상위 클래스에서 기본 생성자가 없는 경우의 문제

❖ 다음 Vehicle과 같이 인자가 있는 생성자를 구현한다면

더 이상 기본 생성자는 구현 없이 자동으로 사용 불가능

하위 클래스 생성자 구현에서 super()를 사용한다면 문법 오류가 발생

14

(15)

단원 06 상속과 다형성

실습예제 6-4, 6-4

❖ 생성자를 구현한 차량 클래스

❖ 자동차를 위한 생성자의 구현과 객체 의 생성

15

(16)

단원 06 상속과 다형성

클래스 접근 지정자

❖ 클래스 접근 지정자는 public과 [default] 방식

키워드 public을 사용한 클래스

다른 모든 클래스에서 사용 가능

접근 지정자를 아무것도 기술하지 않은 default 클래스

동일한 패키지의 다른 클래스에서만 사용 가능

그러므로 default 클래스는 package 클래스라고도 부름

16

(17)

단원 06 상속과 다형성

필드와 메소드 접근 지정자

❖ public, protected


[default], private 4 가지 종류

17

(18)

단원 06 상속과 다형성

실습예제 6-6

❖ 은행계좌를 추상화한 상위 클래스

18

(19)

단원 06 상속과 다형성

실습예제 6-7

❖ 저축계좌를 표현한 클래스

19

(20)

단원 06 상속과 다형성

실습예제 6-8

❖ 동일한 패키지에서 SavingAccount의 사용

20

(21)

단원 06 상속과 다형성

실습예제 6-9

❖ 다른 패키지의 Account를 상위로 하는 하위 클래스

21

(22)

단원 06 상속과 다형성

실습예제 6-10

❖ 다른 패키지에서

SavingAccount 를 사용하는 클 래스 CheckTest

22

(23)

단원 06 상속과 다형성 23

2. 다형성

(24)

단원 06 상속과 다형성

클래스 Person

❖ 학교의 교직원과 학생 정보를 표현하기 위한 계층도

24

(25)

단원 06 상속과 다형성

실습예제 6-12, 6-13

❖ 교직원과 직원 클래스

25

(26)

단원 06 상속과 다형성

하위 객체를 상위 클래스형 변수에 대입

❖ 업 캐스팅

하위 객체는 상위 클래스형 변수에 대입이 가능, 상위로의 자료형 변환

업 캐스팅은 하위인 교직원은 상위인 사람이라는 개념이 성립

❖ 업 캐스팅의 제약

업 캐스팅된 변수로는 하위 객체의 멤버를 참조할 수 없는 제약

Faculty 형 변수 f로는 접근 지정자만 허용하면 모든 멤버를 접근 가능

Person 형 변수 p로는 Person의 멤버인 namenumber만 접근이 가능

26

(27)

단원 06 상속과 다형성

실습예제 6-14

❖ 참조형의 형 넓히기 변환

27

(28)

단원 06 상속과 다형성

상위 객체를 하위 클래스형 변수에 대입

❖ 다운 캐스팅

상위 클래스 형을 하위 클래스 형으로 변환

다운 캐스팅은 반드시 명시적인 형변환 연산자 (하위 클래스)가 필요

만일 형변환 연산자가 없으면 컴파일 시간에 오류 발생

28

(29)

단원 06 상속과 다형성

다운 캐스팅의 실행 오류

❖ 컴파일 시간

상속 관계만 성립하면 다운 캐스팅은 가능

❖ 실행 시간

실제 객체가 할당되지 않았다면 실행 시간에 오류가 발생

29

(30)

단원 06 상속과 다형성

객체 확인 연산자

❖ 연산자 instanceof

30

(31)

단원 06 상속과 다형성

오버라이딩

❖ 메소드 오버라이딩(method overriding) 정의

상위 클래스의 동일한 메소드를 하위 클래스에서 다시 정의하는 것

메소드 재정의(method redefinition)

또는 메소드 대체(method replacement) 라고도 표현

❖ 메소드 오버라이딩의 목적

상위 클래스에서 이미 정의한 메소드를

다시 수정하지 않고 하위 클래스에서 좀 더 보완 수정하거나 완전히 새로운 것으로 대체하 기 위한 방법

31

(32)

단원 06 상속과 다형성

오버라이딩 조건

❖ 조건

메소드의 반환 값과 메소드 이름, 매개변수는 반드시 같아야 함

❷ 접근 지정자는 하위 클래스의 메소드가 보다 공개적

상위 클래스의 메소드가 public이면

– 오버라이딩되는 메소드는 public만 가능

상위 메소드가 protected이면

– 하위 메소드는 public과 protected만 가능

상위 메소드가 default이면

– 하위 메소드는 public과 protected, default만 가능

메소드 수정자가 final, private인 메소드는 오버라이딩될 수 없음

32

(33)

단원 06 상속과 다형성

메소드 오버라이딩 예

33

(34)

단원 06 상속과 다형성

키워드 final

❖ 클래스 앞의 final

클래스가 더 이상 상속되지 못한다는 의미의 키워드

❖ 메소드 반환형 앞의 지정자 final

더 이상 하위 클래스에서 메소드 오버라이딩이 허용되지 않도록 지정하는 키워드

34

(35)

단원 06 상속과 다형성

동적 바인딩

❖ 오버라이딩 메소드 호출

가장 하위 객체의 메소드 실행

35

(36)

단원 06 상속과 다형성

실습예제 6-21

❖ 메소드 재정의를 알아보는 예제

36

(37)

단원 06 상속과 다형성

메소드 오버로딩

❖ 이름이 같으며 인자가 다른 여러 메소드 구현

하나의 클래스 또는 상속 관계에 있는 클래스 내부에서

인자가 다르나 이름이 같은 메소드가 여러 개 정의될 수 있는 특징

37

(38)

단원 06 상속과 다형성 38

3. 추상클래스와 인터페이스

(39)

단원 06 상속과 다형성

추상 클래스(1)

❖ 추상 클래스(abstract class)의 의미

클래스 계층구조에서 상위에 위치, 하위 클래스를 대표하는 클래스

추상의 의미대로 “구체적”이지 않은 클래스

보다 구체적인 하위 클래스를 대표하는 클래스

❖ 다른 일반 클래스와 구별되는 특징

① 추상 클래스는 직접 객체화(instantiation)될 수 없다.

즉 생성자를 사용하여 객체를 생성할 수 없다.

② 추상 클래스는 다른 클래스에 의하여 상속되어야 한다.

즉 하위 클래스가 없는 추상클래스는 의미가 없다.

③ 추상 클래스는 하위 클래스가 있어야 하므로

추상 클래스 구현 시 클래스 앞에 키워드 final이 올 수 없다.

39

(40)

단원 06 상속과 다형성

추상 클래스(2)

❖ 키워드 abstract

40

(41)

단원 06 상속과 다형성

추상 클래스 내부의 추상 메소드

❖ 추상 메소드

메소드 몸체가 없는 메소드

추상 메소드 정의 시 반환형 앞에 키워드 abstract를 기술하고

메소드 몸체 구현 없이 바로 세미콜론을 삽입

추상 메소드는 private와 final이 사용될 수 없음

❖ 추상 클래스

적어도 하나 이상의 추상 메소드를 가진 클래스는 반드시 추상이어야 함

키워드 final 이용 불가능

41

(42)

단원 06 상속과 다형성

하위 클래스에서 추상 메소드의 구현

42

(43)

단원 06 상속과 다형성

실습예제 6-24

❖ 추상 클래스 Shape 구현

43

(44)

단원 06 상속과 다형성

실습예제 6-25, 26

❖ Circle.java

원을 표현한 클래스로 상위 클래스 Shape의 추상 메소드 draw( )를 구현

❖ Rectangle.java

사각형을 표현한 클래스로 상위 클래스 Shape의 추상 메소드 draw( )를 구현

44

package inheritance.abstratinterface;

 

public class Circle extends Shape { double radius;

public Circle(double x, double y, double radius) {

super(x, y);

this.radius = radius;

}

public void draw() { super.drawCenter();

System.out.printf("반지름: %f, ", radius);

System.out.printf("원 면적: %f\n", radius*radius*Math.PI);

} }

package inheritance.abstratinterface;

(45)

단원 06 상속과 다형성

실습예제 6-27

❖ 추상 클래스 Shape 형의 변수로 객체의 추상 메소드 호출

45

(46)

단원 06 상속과 다형성

인터페이스의 의미와 정의

❖ IT 에서 인터페이스

인터페이스는 컴퓨터와 다른 주변기기를 연결하는 표준을 의미

❖ 자바에서 인터페이스

해야 할 작업의 구체적 구현 없이 기능만 선언한 클래스

하위 클래스가 수행해야 하는 메소드와 필요한 상수만을 미리 추상적으로 정의해 놓은 특별한 클래스

인터페이스는 다중 상속(multiple inheritance)을 지원

자바의 일반 클래스는 다중 상속을 지원하지 않음

키워드 interface

46

(47)

단원 06 상속과 다형성

인터페이스 상속

❖ 키워드 extends

인터페이스들 간의 상속

다중 상속인 경우 상위 인터페이스 여러 개를 쉼표로 구분하여 나열

❖ 키워드 implements

인터페이스를 상속받는 하위 클래스를 정의할 때는 사용

❖ 인터페이스를 상속받는 클래스

상위 인터페이스에서 정의한 모든 추상 메소드를 구현

47

(48)

단원 06 상속과 다형성

인터페이스 설계

48

(49)
(50)

Thank You !

참조

관련 문서

ƒ McDonald가 세계 121여개 국가에서 동일한 질의 햄버거를 판매하고 있다는 사실에 근거하여, 국제금융이론의 구매력평가설을 적용한 것.. ƒ 동일한 햄버거를

annualsalary: 외부에서 접근하지 않으나 파생 클래스에서

이는 부분어가 상위 부분어일 때 일어나며, 이때 상위 부분어의 속성을 잃게 하면 일반적인

인천국제공항 제2여객터미널 곳곳에는 현대 미술의 정수를 보여주는 수준 높은 예술 작품들이 전시되어 있습니다.. 새로운 세계로의 여행을 준비하는 특별한

자바에서 처리하는 예외는 모두 Exception 클래스에서 파 Exception 클래스는 Throwable 클래스의 하위 클래스임 결국 모든 예외 클래스가 Throwable의 하위

 같은 문자에 대응하는 BigChar 클래스의 인스턴스가 이미 존재하 는 경우에는, 이것을 이용하고 새로운 인스턴스는 만들지 않는다..  지금까지 만들어진

 다만, 관찰대상이 NumberGenerator의 하위 클래스의 인스턴스 이고 getNumber 메소드를 가지고 있다는 것만 알고 있다.. – Observer는 입력인자로

vector 클래스의 사용 list 클래스의 사용 이터레이터의 이해 이터레이터의 사용 이터레이터의 종류 알고리즘의 이해 알고리즘의