제 8 장 상속.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
제 2 장 객체지향의 이해.
제 4 장 관계 학기 소프트웨어설계.
10장 객체-지향 프로그래밍 II.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
어서와 Java는 처음이지! 제7장 상속.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
23장. 구조체와 사용자 정의 자료형 2.
10장 객체-지향 프로그래밍 II.
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
10장. 예외처리.
자바 5.0 프로그래밍.
11장. 1차원 배열.
CHAP 12. 리소스와 보안.
4 장 클래스 작성.
[INA470] Java Programming Youn-Hee Han
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
27장. 모듈화 프로그래밍.
제3장 클래스와 객체의 사용.
전자정부 표준프레임워크 호환성 가이드 전자정부 표준프레임워크 사업단 실행환경 개발팀.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
제 5 장 집합연관, 복합연관, 인터페이스, 실체화 (교재: J. Schmuller 저/곽용재 역, 초보자를 위한 UML 객체지향설계, 제3판, 정보문화사, 2006) 학기 소프트웨어설계.
10장 객체-지향 프로그래밍 I ©창병모.
20장. 객체지향 프로그래밍 01_ 객체지향 프로그래밍의 시작.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
Power Java 제11장 상속.
컴포넌트 다이어그램 컴포넌트 정의 컴포넌트 다이어그램의 UML 표기법 컴포넌트와 클래스 컴포넌트 다이어그램의 간단한 예
JA A V W. 06.
10장 상속 Section 1 상속의 개요 Section 2 상속과 한정자 Section 3 상속과 생성자
Mariadb JDBC PROGRAMMING2
Fucntion 요약.
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
C# 07장. 객체 지향 개념.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
.Net Web Application 2007 컴퓨터공학실험(Ⅰ)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
서브클래스 조 병 규 한 국 교 통 대 학 교 SQ Lab..
발표자 : 이지연 Programming Systems Lab.
9 브라우저 객체 모델.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
.Net FrameWork for Web2.0 한석수
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
Java의 정석 제 8 장 예외처리 (Exception handling) Java 정석 남궁성 강의
자바 객체 지향 프로그래밍 Ps lab 김윤경.
상속 (Inheritance) private 전용부분 전용부분 공용부분 공용부분 public 기본 클래스
7 생성자 함수.
6 객체.
Presentation transcript:

제 8 장 상속

상속(Inheritance) 상속은 재사용 가능한 클래스를 생성하고 조직하기 위한 기본적인 객체-지향 설계 기술이다. 상속은 재사용 가능한 클래스를 생성하고 조직하기 위한 기본적인 객체-지향 설계 기술이다. 8장 포커스 기존 클래스들로부터 새로운 클래스 유도 protected 가시성 조정자 클래스 계층구조 생성 추상 클래스 상속된 멤버의 간접 가시성 상속을 위한 설계 GUI 컴포넌트 클래스 계층구조 감청자 어댑터 클래스의 확장 Timer 클래스 © 2004 Pearson Addison-Wesley. All rights reserved

Outline 서브클래스 생성 메쏘드 재정의 클래스 계층구조 상속 및 가시성 상속을 위한 설계 상속 및 GUI Timer 클래스 © 2004 Pearson Addison-Wesley. All rights reserved

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

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

상속 상속은 왜 하나? 소프트웨어 재사용(Software reuse) 기존의 소프트웨어 컴포넌트를 사용해서 새로운 클래스 생성 기존 소프트웨어를 재사용함으로써 기존 소프트웨어에 들인 모든 노력을 재사용 © 2004 Pearson Addison-Wesley. All rights reserved

서브클래스 유도 예약어 extends를 사용한다. See Words.java (page 440) class Car extends Vehicle { // class contents } See Words.java (page 440) See Book.java (page 441) See Dictionary.java (page 442) © 2004 Pearson Addison-Wesley. All rights reserved

Word.java © 2004 Pearson Addison-Wesley. All rights reserved

Book.java © 2004 Pearson Addison-Wesley. All rights reserved

Dictionary.java © 2004 Pearson Addison-Wesley. All rights reserved

protected 조정자 가시성 조정자 보호(Protected)가시성 부모 클래스 멤버가 자식 클래스에서 사용되는 방식에 영향을 미친다. 전용(private) 가시성을 갖는 멤버 자식 클래스 내에서 직접 접근할 수 없다. 공용(public) 가시성을 갖는 멤버 자식 클래스뿐만 아니라 어디서나 접근 가능 공용 변수는 캡슐화 원리를 위반 보호(Protected)가시성 상속 상황을 위한 제3의 가시성 © 2004 Pearson Addison-Wesley. All rights reserved

protected 조정자 protected 멤버 protected 멤버 표시 자식 클래스가 직접 접근할 수 있다. 공용 가시성보다는 더 캡슐화하고 전용보다는 덜 캡슐화 한다. 보호 멤버는 부모 클래스와 같은 패키지 내의 어떤 클래스에서도 사용가능 protected 멤버 표시 UML 다이어그램에서 # 기호로 표시 © 2004 Pearson Addison-Wesley. All rights reserved

Words를 위한 클래스 다이어그램 Book Words Dictionary # pages : int + pageMessage() : void Dictionary - definitions : int + definitionMessage() : void Words + main (args : String[]) : void © 2004 Pearson Addison-Wesley. All rights reserved

super 참조 구성자(constructor)는 상속되지 않는다. 자식 클래스에서 객체의 “부모 부분”을 설정하기 위해 부모의 구성자를 사용하고자 할 때 super( ) 사용 부모의 구성자 호출 필요하면 자식 구성자가 첫 줄에서 부모 구성자를 한다 See Words2.java (page 445) See Book2.java (page 446) See Dictionary2.java (page 447) © 2004 Pearson Addison-Wesley. All rights reserved

Word2.java © 2004 Pearson Addison-Wesley. All rights reserved

Book2.java © 2004 Pearson Addison-Wesley. All rights reserved

Dictionary2.java © 2004 Pearson Addison-Wesley. All rights reserved

다중 상속(Multiple Inheritance) Java는 단일 상속(single inheritance)만 지원 자식 클래스는 하나의 부모만 가질 수 있다. 인터페이스를 사용하여 다중 상속과 비슷한 효과를 낼 수 있다. 다중 상속(Multiple inheritance) 자식 클래스가 두 개 이상의 부모 클래스를 갖는 경우 두 부모 내의 같은 이름의 변수 등과 같은 충돌을 해결해야 한다. 이 있을 수 있다. © 2004 Pearson Addison-Wesley. All rights reserved

Outline 서브클래스 생성 메쏘드 재정의 클래스 계층구조 상속 및 가시성 상속을 위한 설계 상속 및 GUI Timer 클래스 © 2004 Pearson Addison-Wesley. All rights reserved

메쏘드 재정의(overriding) 메쏘드 재정의란 무엇인가? 메쏘드의 서명(signature) 재정의된 메쏘드 실행 자식 클래스가 상속된 메쏘드를 자신이 원하는 대로 재정의하는 것 새로운 메쏘드는 부모 메쏘드와 이름과 서명(signature)이 같아야 한다. 메쏘드의 서명(signature) 메쏘드의 매개변수 이름, 개수, 순서, 타입 재정의된 메쏘드 실행 그 메쏘드를 실행하는 객체의 타입에 따라 호출될 메쏘드가 결정된다. See Messages.java (page 450) See Thought.java (page 451) See Advice.java (page 452) © 2004 Pearson Addison-Wesley. All rights reserved

Message.java © 2004 Pearson Addison-Wesley. All rights reserved

Thought.java © 2004 Pearson Addison-Wesley. All rights reserved

Advice.java © 2004 Pearson Addison-Wesley. All rights reserved

재정의 재정의 당한 부모 클래스의 메쏘드 final로 선언된 메쏘드 변수 차단(shadowing variable) 자식 클래스에서 super 참조를 이용해서 명시적 호출 가능 final로 선언된 메쏘드 재정의될 수 없다. 변수 차단(shadowing variable) 재정의 개념을 변수에도 적용할 수 있다. 차단 변수는 불필요하게 코드를 혼란스럽게 함으로 피해야 한다. © 2004 Pearson Addison-Wesley. All rights reserved

중복 정의 vs. 재정의 중복정의 재정의 한 클래스 내에 같은 이름의 여러 개의 메쏘드로 서로 다른 서명을 갖는 경우 한 클래스 내에 같은 이름의 여러 개의 메쏘드로 서로 다른 서명을 갖는 경우 비슷한 연산을 다른 매개변수에 대해서 다른 방식으로 정의하는데 사용 재정의 부모 클래스와 자식 클래스에 있는 두 개의 메쏘드로 같은 서명을 갖는 경우 비슷한 연산을 다른 객체 타입에 대해서 다른 방식으로 정의하는데 사용 © 2004 Pearson Addison-Wesley. All rights reserved

Outline 서브클래스 생성 메쏘드 재정의 클래스 계층구조 상속 및 가시성 상속을 위한 설계 상속 및 GUI Timer 클래스 © 2004 Pearson Addison-Wesley. All rights reserved

클래스 계층구조(Class Hierarchy) 한 부모의 자식 클래스가 다른 클래스의 부모 클래스가 되어 계층구조 형성 Business KMart Macys ServiceBusiness Kinkos RetailBusiness © 2004 Pearson Addison-Wesley. All rights reserved

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

Object 클래스 Object 클래스 Object 클래스는 모든 클래스 계층구조에서 궁극적인 루트 Java 표준 라이브러리의 java.lang 패키지에 정의되어 있다. 모든 클래스는 Object 클래스로부터 상속받는다. 어떤 클래스의 자식 클래스로 명시적으로 정의되지 않으면 자동적으로 Object 클래스의 자식 클래스가 된다. © 2004 Pearson Addison-Wesley. All rights reserved

Object 클래스 Object 클래스가 포함하고 있는 유용한 메쏘드 toString 메쏘드 equals 메쏘드 객체의 클래스 이름과 다른 정보를 포함한 스트링 반환 toString 메쏘드를 정의할 때마다 사실은 재정의하는 것임 equals 메쏘드 두 참조가 같은 객체에 대한 이명(alias)이면 참(true) 반환 어떤 클래스에서도 적절하게 equals 메쏘드 재정의 가능 String 클래스의 equals 메쏘드 두 String 객체가 같은 문자들을 포함하면 참을 반환하도록 재정의 © 2004 Pearson Addison-Wesley. All rights reserved

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

추상 클래스 자식 클래스가 부모 클래스의 추상 메쏘드를 구현한다. 구현하지 않으면 자식 클래스도 여전히 추상 클래스가 된다. 추상 메쏘드는 final이나 static으로 선언하면 안됨 추상 클래스 사용은 소프트웨어 설계에서 중요한 요소 실체화하기에 너무 포괄적인 공통 요소들을 계층구조에 위치시킬 수 있도록 해준다. © 2004 Pearson Addison-Wesley. All rights reserved

인터페이스 계층구조 인터페이스 상속 자식 인터페이스를 구현한 클래스 상속은 클래스뿐만 아니라 인터페이스에도 적용 가능 한 인터페이스가 다른 인터페이스를 상속할 수 있다. 자식 인터페이스는 부모의 모든 추상 메쏘드들을 상속받는다. 클래스 계층구조와 인터페이스 계층구조는 별개임 자식 인터페이스를 구현한 클래스 자식 인터페이스뿐만 아니라 그 조상들의 메쏘드들도 구현해야 한다. © 2004 Pearson Addison-Wesley. All rights reserved

Outline 서브클래스 생성 메쏘드 재정의 클래스 계층구조 상속 및 가시성 상속을 위한 설계 상속 및 GUI Timer 클래스 © 2004 Pearson Addison-Wesley. All rights reserved

가시성 재조명 상속과 가시성과 관련된 미묘한 문제 부모의 모든 멤버들은 전용(private)일지라도 자식에 상속된다. 상속된 전용 멤버는 자식이 이름으로 직접 참조할 수 없다. 상속된 전용 멤버는 존재하며 간접적으로 참조 가능하다. 부모가 전용 멤버를 참조할 수 있으므로 자식은 부모 메쏘드를 통해 간접적으로 접근할 수 있다. 부모의 객체가 없더라도 super 참조를 이용하여 부모 클래스를 참조할 수 잇다. © 2004 Pearson Addison-Wesley. All rights reserved

FoodAnalyzer.java © 2004 Pearson Addison-Wesley. All rights reserved

FoodItem.java © 2004 Pearson Addison-Wesley. All rights reserved

Pizza.java © 2004 Pearson Addison-Wesley. All rights reserved

Outline 서브클래스 생성 메쏘드 재정의 클래스 계층구조 상속 및 가시성 상속을 위한 설계 상속 및 GUI Timer 클래스 © 2004 Pearson Addison-Wesley. All rights reserved

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

상속 설계 이슈 is-a 관계 클래스 계층구조 클래스의 공통 특성 자식 클래스 모든 상속은 is-a 관계이어야 한다. 잠재적인 미래에 대해서 생각해보고 클래스를 유연하고 재사용 가능하게 설계해라. 클래스의 공통 특성 가능하면 계층구조에서 높게 위치시켜라. 자식 클래스 자식의 기능에 맞게 적절하게 메쏘드를 재정의하라. 새로운 변수를 추가하라 그러나 상속된 변수를 재정의(차단) 말라. © 2004 Pearson Addison-Wesley. All rights reserved

상속 설계 이슈 각 클래스가 자신의 데이터 관리 일반적인 메쏘드를 정의 추상 클래스 가시성 조정자 각 클래스가 자신의 데이터를 관리하도록 하라. 부모의 데이터를 설정하려면 부모의 구성자를 호출하라. 일반적인 메쏘드를 정의 현재 사용하지 않더라도 toString, equals와 같은 일반적인 메쏘드를 적절히 정의해라. 추상 클래스 하위 클래스들이 공통적으로 갖고 있는 일반적인 개념은 추상 클래스로 표현해라. 가시성 조정자 캡슐화를 위반하지 않고 접근할 수 있도록 가시성 조정자를 주의 깊게 사용하라. © 2004 Pearson Addison-Wesley. All rights reserved

상속 제한 final 조정자를 이용해서 상속을 못하게 할 수 있다. 메쏘드에 final 조정자 클래스에 final 조정자 재정의 할 수 없다. 클래스에 final 조정자 클래스가 상속될 수 없다. 따라서 추상 클래스는 final로 선언하면 안됨. © 2004 Pearson Addison-Wesley. All rights reserved

Outline 서브클래스 생성 메쏘드 재정의 클래스 계층구조 상속 및 가시성 상속을 위한 설계 상속 및 GUI Timer 클래스 © 2004 Pearson Addison-Wesley. All rights reserved

컴포넌트 클래스 계층구조 GUI 컴포넌트 Swing GUI 컴포넌트 GUI 컴포넌트를 구성하는 클래스들은 계층구조의 일부 JComponent 클래스로부터 유도 Jcomponent  Container  Component 많은 Swing 컴포넌트는 컨테이너 역할을 할 수 있다. © 2004 Pearson Addison-Wesley. All rights reserved

컴포넌트 클래스 계층구조 애플릿이 상속의 좋은 예 Applet, JApplet 클래스 paintComponent 메쏘드 정의 AppletClass extends Applet { … } AppletClass extends JApplet { … } 내가 작성한 애플릿이 해야 할 일만 정의하면 된다. Applet, JApplet 클래스 애플릿 생성, 실행 등에 관한 모든 세부사항을 정의함 Web browser와 상호작용 HTML를 통한 매개변수 전달 보안 제약 실행 paintComponent 메쏘드 정의 사실은 Jcomponent에서 정의되고 Japplet를 통해 상속된 것을 재정의 © 2004 Pearson Addison-Wesley. All rights reserved

Event Adapter Classes 상속을 이용한 감청자(listener) 클래스 작성 지금까지 MouseListener 같은 인터페이스 구현해서 생성 이벤트 어댑터 클래스 상속해서 감청자 구현 가능 각 감청자 인터페이스에 상응하는 어댑터 클래스가 존재 MouseAdapter 클래스 각 어댑터 클래스는 해당 인터페이스를 빈 메쏘드로 구현 어댑터 클래스로부터 감청자 클래스를 유도할 때 프로그램과 관련된 메쏘드만 재정의하면 된다. 사용하지 않는 이벤드 관련 메쏘드는 재정의할 필요 없음 © 2004 Pearson Addison-Wesley. All rights reserved

OffCenter.java © 2004 Pearson Addison-Wesley. All rights reserved

OffCenterPanel.java © 2004 Pearson Addison-Wesley. All rights reserved

OffCenterPanel.java © 2004 Pearson Addison-Wesley. All rights reserved

Outline 서브클래스 생성 메쏘드 재정의 클래스 계층구조 상속 및 가시성 상속을 위한 설계 상속 및 GUI Timer 클래스 © 2004 Pearson Addison-Wesley. All rights reserved

Timer 클래스 javax.swing의 Timer 클래스 메쏘드 보이지 않는 GUI 컴포넌트 Timer 객체는 정해진 시간간격마다 action event 발생 애니메이션 등에서 시간간격에 따라 동작할 때 사용 가능 자연스런 움직임을 위해 적절한 시간간격 사용해야 한다. 메쏘드 start( ), stop( ) 메쏘드가 타이머를 시작하고 멈춘다 시간간격 설정 Timer 구성자 혹은 setDelay 메쏘드 © 2004 Pearson Addison-Wesley. All rights reserved

Rebound.java © 2004 Pearson Addison-Wesley. All rights reserved

ReboundPanel.java © 2004 Pearson Addison-Wesley. All rights reserved

ReboundPanel.java © 2004 Pearson Addison-Wesley. All rights reserved

요약 8장 포커스: 기존 클래스로부터 새로운 클래스 유도 protected 조정자 클래스 계층구조 생성 추상 클래스 상속된 멤버의 간접적 가시성 상속을 위한 설계 GUI 컴포넌트 클래스 계층구조 listener adapter 클래스 확장 Timer 클래스 © 2004 Pearson Addison-Wesley. All rights reserved