2009학년도 1학기 상지대학교 컴퓨터정보공학부 고 광 만

Slides:



Advertisements
Similar presentations
2013 년 목 차 용어의 정의 위기경보 수준 국가 생물테러 대응 체계도 반 · 팀별 소방의 임무.
Advertisements

3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
객체지향 프로그래밍.
Chap05 상속 5.1 상속의 개요 5.2 멤버 변수의 상속 5.3 메소드의 상속과 오버라이딩(Overriding)
Java로 배우는 디자인패턴 입문 Chapter 0. UML 과 Design Pattern
C# 05장. 메소드와 인자.
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
8. 객체와 클래스 (기본).
명품 JAVA Programming.
Java RMI (Remote Method Invocation)
Java RMI (Remote Method Invocation)
명품 JAVA Programming 제 4 장 클래스와 객체.
Power Java 제4장 자바 프로그래밍 기초.
[INA470] Java Programming Youn-Hee Han
10장 객체-지향 프로그래밍 II ©창병모.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
자바 5.0 프로그래밍.
프로그래밍 언어론 제 9 장 객체 지향 개념 객체 지향 방법론 객체 모델링 객체 지향 언어 C++ 객체 지향 언어 CLOS
명품 JAVA Essential.
명품 Java Programming.
최용술 장 Thread 최용술
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
윤 홍 란 4 장 클래스 작성 윤 홍 란
2010학년도 2학기 객체지향의 이해.
DataScience Lab. 박사과정 김희찬 (월)
C ++ 프로그래밍 시작.
인터페이스(Interfaces) 강원대학교.
김 정 석 Web Programming 김 정 석
객체지향적인 프로그래밍에 대한 이해 클래스와 객체의 개념에 대한 이해
상속과 인터페이스 클래스의 상속에 대하여 인터페이스에 대하여.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Java 8장. 상속 public class SumTest {
DataScience Lab. 박사과정 김희찬 (월)
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
소프트웨어 공학 (Software Engineering)
가상함수와 추상 클래스.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
C# 09장. 상속성.
Web programming Chap 04 상속 김 정 석
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
프로그래밍 개론 Ⅰ 제 1장 . 서론 ①.
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Chapter3 : 객체지향의 개념 3.1 객체지향(object-oriented)과
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
JA A V W. 04.
7강. 객체지향 프로그램의 본질 메소드 프로그래밍의 한계 객체의 개념 및 클래스의 이해
Chapter 02. 소프트웨어와 자료구조.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
[ 단원 06 ] 상속과 다형성.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
Java RMI (Remote Method Invocation)
6장 클래스(상속).
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
컴퓨터 프로그래밍: 실습 1 제 1장 . 서론.
Java 5장. 객체지향 개념 public class SumTest {
컴퓨터 계측 및 실습 C++ 기초 영남대학교 기계공학부.
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
[색채지각 ] Color Perception.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
C++ 언어의 특징
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

2009학년도 1학기 상지대학교 컴퓨터정보공학부 고 광 만 Lecture 6: 확장 클래스 2009학년도 1학기 상지대학교 컴퓨터정보공학부 고 광 만

목 차 확장 클래스(Extended Class) 인터페이스(Interface) 클래스형 변환 클래스 설계

확장 클래스 [1/3] 확장 클래스의 개념 상속(Inheritance) superclass의 모든 속성이 subclass로 전달되는 기능 클래스의 재사용성을 증가 superclass (base class) 기존 클래스 추가정보 subclass (derived class) 확장 클래스

확장 클래스 [2/3] 확장 클래스 정의 형태 확장 클래스의 예 : class SubClassName extends SuperClassName { // 필드 선언 // 메소드 정의 } class SuperClass { int a; void methodA { // ... } class SubClass extends SuperClass { int b; void methodB { // ... }

확장 클래스 [3/3] 단일 상속(single inheritance) Object 클래스 오직 한 개의 슈퍼클래스만 사용 오직 한 개의 슈퍼클래스만 사용 다중 상속(multiple inheritance)을 허용하지 않음 Object 클래스 모든 클래스의 슈퍼클래스 객체에 적용할 수 있는 기본 메소드가 정의 슈퍼클래스를 명시하지 않으면 기본적으로 슈퍼클래스는 Object

확장 클래스의 필드 주의 다른 필드, 메소드 이름은 상속 동일한 이름한 필드, 메소드 이름은 숨겨짐(hiding) super --- 숨겨진 슈퍼클래스에 있는 필드를 참조할 때 사용. class SuperClass { int a = 1; int b = 1; } class SubClass extends SuperClass { int a = 2; int b = super.a; // . . . super.a super.b a b

확장 클래스의 생성자 [1/2] 형태와 의미는 클래스 생성자와 동일. 실행과정 슈퍼클래스를 초기화하기 위해 먼저 슈퍼클래스 생성자를 호출. super() 슈퍼클래스의 생성자를 명시적으로 호출 명시적으로 호출하지 않으면, 기본 생성자가 컴파일러에 의해 자동적으로 호출 실행과정 1) 슈퍼클래스의 생성자를 호출. 2) 필드를 초기화하는 부분이 실행. 3) 생성자의 몸체부분을 수행. 예제 6.2 테스트

확장 클래스의 생성자 [2/2] 확장 클래스의 생성자 사용 예 [예제 6.2 - SubConstructor.java] class SuperClass { SuperClass() { System.out.println("SuperClass Constructor ..."); } class SubClass extends SuperClass { SubClass() { System.out.println("SubClass Constructor ..."); public class SubConstructor { public static void main(String[] args) { SubClass obj = new SubClass(); System.out.println("in main ..."); 실행 결과 : SuperClass Constructor ... SubClass Constructor ... in main ...

메소드 재정의 [1/2] 메소드 재정의(method overriding) 메소드 재정의를 할 수 없는 경우 슈퍼클래스에 정의된 메소드의 의미를 서브클래스에서 변경 매개변수 개수와 형이 같음 --- 같은 메소드 서브 클래스의 메소드로 대체 메소드 중복(method overloading) 매개변수 개수와 형이 다름 --- 다른 메소드 메소드 재정의를 할 수 없는 경우 정적(static) 메소드 최종(final) 메소드 최종 클래스 내에 있는 모든 메소드는 묵시적으로 최종 메소드 예제 6.6 테스트

메소드 재정의 [2/2] 메소드 재정의 예 [예제 6.6 - Addendum.java] class SuperClass { void methodA() { System.out.println("do SuperClass Task."); } class SubClass extends SuperClass { super.methodA(); System.out.println("do SubClass Task."); public class Addendum { public static void main(String[] args) { SubClass obj = new SubClass(); obj.methodA(); 실행 결과 : do SuperClass Task. do SubClass Task.

추상 클래스(abstract class) [1/3] 추상 클래스 정의 추상 메소드(abstract method)를 갖고 있는 클래스 추상 메소드 : 실질적인 구현을 갖지 않고 메소드 선언만 있는 경우 선언 방법 abstract class AbstractClass { public abstract void methodA(); void methodB() { // ... }

추상 클래스(abstract class) [2/3] 구현되지 않고, 단지 외형만을 제공 추상 클래스는 객체를 가질 수 없음 다른 외부 클래스에서 메소드를 사용할 때 일관성 있게 다루기 위한 방법을 제공 다른 클래스에 의해 상속 후 사용 가능 서브클래스에서 모든 추상 메소드를 구현한 후에 객체 생성 가능 [예제 6.7] 테스트 추상 메소드를 서브클래스에서 구현할 때 접근 수정자는 항상 일치

추상 클래스(abstract class) [3/3] 추상 클래스 사용 예 [예제 6.7 - AbstractClassTest.java] abstract class AbstractClass { public abstract void methodA(); void methodB() { System.out.println("Implementation of methodB()"); } class ImpClass extends AbstractClass { public void methodA () { System.out.println("Implementation of methodA()"); public class AbstractClassTest { public static void main(String[] args) { ImpClass obj = new ImpClass(); obj.methodA(); obj.methodB(); 실행 결과 : Implementation of methodA() Implementation of methodB()

무명 클래스(Anonymous Class) [1/2] 중첩 클래스와 같이 클래스 내부에서 사용하고자하는 객체를 정의할 수 있는 방법을 제공하며 객체를 생성하고자 하는 코드 부분에서 직접 객체 생성루틴과 함께 클래스를 정의 클래스의 이름이 없다. 한번만 사용이 가능 [예제 6.8] 무명 클래스를 사용하여 필요한 클래스를 따로 정의하지 않고, methodA() 메소드의 매개변수로 직접 정의하고 객체를 생성하여 사용

무명 클래스(Anonymous Class) [2/2] 무명 클래스 사용 예 [예제 6.8 - AnonymousExample.java] class AnonymousClass { public void print() { System.out.println("This is AnonymTest Class."); } public class AnonymousExample { public static void methodA(AnonymousClass obj) { obj.print(); public static void main(String[] args) { methodA(new AnonymousClass() { // 무명 클래스 System.out.println("This is redefined by Anonymous Example."); }); 실행 결과 : This is redefined by Anonymous Example.

인터페이스란 정의 및 특징 사용자 접속을 기술하는 방법으로 메소드들을 선언하고 필요한 상수들을 정의한 프로그래밍 단위 상수와 구현되지 않은 메소드들만을 갖고 있는 순수한 설계의 표현 다중상속(multiple inheritance) 지원 단일 상속(single inheritance) - 클래스

public, static, final의 속성 인터페이스 선언 [1/4] 선언 형태 사용 예 [public] interface interfaceName [extends ListOfSuperInterfaces] // constant definitions // method declarations } 내부적으로 상수를 의미하는 public, static, final의 속성 interface BaseColors { int RED = 1; int GREEN = 2; int BLUE = 4; void setColor(int color); int getColor(); }

인터페이스 선언 [2/4] 인터페이스의 필드 내부적으로 상수를 의미하는 public, static, final의 속성 선언된 모든 필드는 반드시 초기화 interface BaseColors { int RED = 1; int GREEN = RED + 1; int BLUE = GREEN + 2; void setColor(int color); int getColor(); } C 언어의 #define문 사용과 유사

인터페이스 선언 [3/4] 인터페이스의 메소드 추상(abstract) 속성 내부적으로 추상 메소드가 됨 모든 메소드를 구현되지 않는 메소드, 추상 클래스 내부적으로 모두 public 메소드 static이 올 수 없음 생성자를 갖지 않음

인터페이스 선언 [4/4] 인터페이스 몸체에서 사용할 수 없는 선언 수정자 인터페이스 선언 private, protected, synchronized, volatile 인터페이스 선언 인터페이스를 구현하는 클래스가 존재 인터페이스는 객체를 가질 수 없음 7.3절에서 설명 class className implements InterfaceName { // . . . }

인터페이스 확장 [1/4] 확장 형태 확장 예 [public] interface interfaceName extends ListOfSuperInterfaces { // constant definitions // method declarations } interface RainbowColors extends BaseColors { int YELLOW = 3; int ORANGE = 5; int INDIGO = 6; int VIOLET = 7; void printColor(int color); }

인터페이스 확장 [2/4] 인터페이스의 다중 상속

인터페이스 확장 [3/4] 다중 상속 예 다중 상속시 동일한 이름의 상수를 상속 단순 명은 ambiguous하기 때문에 에러 RainbowColors.YELLOW, PrintColors.YELLOW interface ManyColors extends RainbowColors, PrintColors { int VERMILION = 3; int CHARTUSE = RED + 90; }

인터페이스 확장 [4/4] 메소드 상속 overloading, overriding 시그네춰가 같고 복귀형이 다르면 에러 메소드 상속 예 interface BaseColors { // ... void setColor(int color); int getColor(); } interface ActionColors extends BaseColors { void setColor(int color) ; // overriding void setColor(int red, int green, int blue) ; // overloading // Color getColor(); // 에러 }

인터페이스 구현 [1/7] 클래스를 통하여 구현된 후 객체를 가짐 구현 형태 class ClassName implements InterfaceName { // fields // methods }

인터페이스 구현 [2/7] 구현 예 class Color implements BaseColors { // fields 구현시 public 명시 interface BaseColors { int RED = 1; int GREEN = RED + 1; int BLUE = GREEN + 2; void setColor(int color); int getColor(); } class Color implements BaseColors { // fields public void setColor(int color) { // 몸체 완성 } public int getColor() {

인터페이스 구현 [3/7] 인터페이스에 있는 모든 메소드들을 구현하지 않으면 추상 클래스. 추상 클래스는 다시 상속하여 메소드 몸체를 완성한 후 객체 생성 abstract class SetColor implements BaseColors { // fields public void setColor(int color) { // … }

인터페이스 구현 [4/7] 클래스 확장과 동시에 인터페이스 구현 다이아몬드 상속 [예제 6.10] 테스트 다이아몬드 상속 [예제 6.10] 테스트 class ClassName extends SuperClass implements ListOfInterfaces { // fields // methods } interface W { } interface X extends W { } class Y implements W { } class Z extends Y implements X { }

인터페이스 구현 [5/7] 인터페이스 구현의 예 – 정의 및 구현 [예제 6.10 - ImplementingInterface.java] interface BaseColors { int RED = 1, GREEN = 2, BLUE = 4; void setColor(int color); int getColor(); } abstract class SetColor implements BaseColors { protected int color; public void setColor(int color) { this.color = color; System.out.println("in the setColor method ..."); class Color extends SetColor { public int getColor() { System.out.println("in the getColor method ..."); return color; [Next Page]

인터페이스 구현 [6/7] 인터페이스 구현의 예 – 사용 [예제 6.10 - ImplementingInterface.java](cont.) public class ImplementingInterface { public static void main(String[] args) { Color c = new Color(); int i; c.setColor(10); i = c.getColor(); System.out.println("in the main method ..."); } 실행 결과 : in the setColor method ... in the getColor method ... in the main method ...

인터페이스 구현 [7/7] 인터페이스 형의 매개 변수 선언 dummy()의 실 매개 변수 : InterfaceA 형을 구현한 클래스의 객체 void dummy( InterfaceA interfaceRef ) { Object obj = interfaceRef; // ... }

인터페이스 vs. 추상 클래스 인터페이스 추상 클래스 다중 상속을 지원 메소드 선언만 가능 - 메소드를 정의할 수 없음. 단일 상속 메소드의 부분적인 구현이 가능

클래스형 변환 [1/3]  casting up : valid type conversion  casting down : invalid type conversion 슈퍼클래스 cast 연산자 자동 변환 서브클래스

dummy( (Java)c ); // 예외발생 클래스형 변환 [2/3] void dummy(CLanguage obj) { // … } // ... Java j = new Java(); dummy(j); // OK void dummy(Java obj) { // … } // ... Clanguage c = new CLanguage(); dummy(c); // 에러 dummy( (Java)c ); // 예외발생

클래스형 변환 [3/3] Polymorphism 적용하는 객체에 따라 메소드의 의미가 달라지는 것 c의 형은 CLanguage이지만 Java 클래스의 객체를 가리킴 CLanguage c = new Java(); c.print();

클래스 설계 [1/2] 클래스를 정의할 때 상속성을 이용하여 계층적 구조를 갖도록 설계하는 일은 매우 중요 공통적으로 갖는 필드와 메소드들은 모두 슈퍼클래스에 선언 객체지향 방법론의 접근 순서 OOA OOD OOP

클래스 설계 [2/2] class AnsiC { int declarations; int operators; int statements; void functions() { // ... } class Java extends AnsiC { int classes; int exceptions; int threads; class Cplusplus Extends AnsiC { int operatorOverloadings; class Oopl extends AnsiC { int classes; int exceptions; } class Java extends Oopl { int threads; class Cplusplus extends Oopl { int operatorOverloadings;