1 / 37

Lecture 6: 확장 클래스

Lecture 6: 확장 클래스. 2009 학년도 1 학기 상지대학교 컴퓨터정보공학부 고 광 만. 목 차. 확장 클래스 (Extended Class) 인터페이스 (Interface) 클래스형 변환 클래스 설계. 확장 클래스 [1/3]. 확장 클래스의 개념 상속 (Inheritance) superclass 의 모든 속성이 subclass 로 전달되는 기능 클래스의 재사용성 을 증가. superclass (base class). 기존 클래스. 추가정보. subclass

Download Presentation

Lecture 6: 확장 클래스

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. 확장 클래스 [2/3] • 확장 클래스 정의 형태 • 확장 클래스의 예 :

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

  6. 확장 클래스의 필드 • 주의 • 다른 필드, 메소드 이름은 상속 • 동일한 이름한 필드, 메소드 이름은 숨겨짐(hiding) • super --- 숨겨진 슈퍼클래스에 있는 필드를 참조할 때 사용. super.a super.b a b

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

  8. 확장 클래스의 생성자[2/2] • 확장 클래스의 생성자 사용 예

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

  10. 메소드 재정의 [2/2] • 메소드 재정의 예

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

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

  13. 추상 클래스(abstract class) [3/3] • 추상 클래스 사용 예

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

  15. 무명 클래스(Anonymous Class) [2/2] • 무명 클래스 사용 예

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

  17. 인터페이스 선언 [1/4] • 선언 형태 • 사용 예 내부적으로 상수를 의미하는 public, static, final의 속성

  18. 인터페이스 선언 [2/4] • 인터페이스의 필드 • 내부적으로 상수를 의미하는 public, static, final의 속성 • 선언된 모든 필드는 반드시 초기화 C 언어의 #define문 사용과 유사

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

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

  21. 인터페이스 확장 [1/4] • 확장 형태 • 확장 예

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

  23. 인터페이스 확장 [3/4] • 다중 상속 예 • 다중 상속시 동일한 이름의 상수를 상속 • 단순 명은 ambiguous하기 때문에 에러 • RainbowColors.YELLOW, PrintColors.YELLOW

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

  25. 인터페이스 구현 [1/7] • 클래스를 통하여 구현된 후 객체를 가짐 • 구현 형태

  26. 인터페이스 구현 [2/7] • 구현 예 구현시 public 명시 interface BaseColors { int RED = 1; int GREEN = RED + 1; int BLUE = GREEN + 2; void setColor(int color); int getColor(); }

  27. 인터페이스 구현 [3/7] • 인터페이스에 있는 모든 메소드들을 구현하지 않으면 • 추상 클래스. • 추상 클래스는 다시 상속하여 메소드 몸체를 완성한 후 객체 생성

  28. 인터페이스 구현 [4/7] • 클래스 확장과 동시에 인터페이스 구현 • 다이아몬드 상속 [예제 6.10] 테스트

  29. 인터페이스 구현 [5/7] • 인터페이스 구현의 예 – 정의 및 구현

  30. 인터페이스 구현 [6/7] • 인터페이스 구현의 예 – 사용

  31. 인터페이스 구현 [7/7] • 인터페이스 형의 매개 변수 선언 • dummy()의 실 매개 변수 : InterfaceA 형을 구현한 클래스의 객체

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

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

  34. 클래스형 변환 [2/3] dummy( (Java)c ); // 예외발생

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

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

  37. 클래스 설계 [2/2]

More Related