개발자 쿠키

명품 JAVA Programming Chap05 상속 본문

java

명품 JAVA Programming Chap05 상속

개발자 쿠키 2022. 8. 13. 21:50

Chap05 상속

  1. 상속의 개념
  2. 클래스 상속과 객체
  3. 상속과 protected 접근 지정자
  4. 상속과 생성자
  5. 업캐스팅과 instanceof 연산자
  6. 메소드 오버라이딩
  7. 추상 클래스
  8. 인터페이스

Chap05-1 상속의 개념

  • 클래스의 간결화 - 멤버의 중복 작성 불필요
  • 클래스 관리 용이 - 클래스들의 계층적 분류
  • 소프트웨어의 생산성 향상 - 클래스 재사용과 확장 용이 

Chap05-2 클래스 상속과 객체

  • 부모 클래스: 슈퍼 클래스(super class)
  • 자식 클래스: 서브 클래스(sub class) 

서브 클래스 객체 생성

point p = new Point();
ColorPoint cp = new ColorPoint();    // 서브 클래스 객체 생성

자바 상속의 특징

  • 자바에서는 클래스의 다중 상속을 지원하지 않는다.
  • 자바에서는 상속의 횟수에 제한을 두지 않는다.
  • 자바에서는 계층 구조의 최상위에 java.lang.Object 클래스가 있다.

Chap05-3 상속과 protected 접근 지정자

  • 슈퍼 클래스 protected 멤버가 접근을 허용할 때
    • 같은 패키지에 속한 모든 클래스들은 접근 가능하다.
    • 같은 패키지든 다른 패키지든 상속받는 서브 클래스

Chap05-4 상속과 생성자

super() : 슈퍼 클래스 생성자를 호출하는 코드
              반드시 생성자의 첫 라인에 사용되어야 한다.

b = new B(5);
spier(x); // x 값은 5

Chap05-5 업캐스팅과 instanceof 연산자

  • 캐스팅(casting): 타입변환
    • 업캐스팅: 서브 클래스의 객체에 대한 레퍼런스를 슈퍼 클래스 타입으로 변환하는 것
    • 다운캐스팅: 업캐스팅과 반대
  • instanceof 연산자: 이항 연산자 boolean값으로 결과 값이 나온다.
레퍼런스 instanceof 클래스명

Chap05-6 메소드 오버라이딩

  • 메소드 오버라이딩(method overriding): 슈퍼 클래스와 서브 클래스의 메소드 사이에 발생하는 관계로서, 슈퍼 클래스에 선언된 메소드와 같은 이름, 같은 리턴 타입, 같은 매개 변수 리스트를 갖는 메소드를 서브 클래스에서 재작성 하는 것이다.
  • 동적 바인딩: 슈퍼 클래스의 메소드를 무시하고 서브 클래스에서 오버라이딩된 메소드가 무조건 실행되도록 하는 것

 

  • 메소드 오버라이딩의 제약 사항
    • 슈퍼 클래스의 메소드와 동일한 원형으로 작성한다.
    • 슈퍼 클래스 메소드의 접근 지정자보다 접근의 범위를 좁여 오버라이딩 할 수 없다. 
this와 super는 모두 레퍼런스로서 this로는 현재 객체의 모든 멤버를, super로는 현재 객체 내에 있는 슈퍼 클래스 멤버를 접근할 수 있다.

this.객체내의멤버
super.객체내의슈퍼클래스의 멤버

this()와 super()는 모두 메소드 호출이며, this()는 생성자에서 다른 생성자를 호출할 때 사용하고, super()는 서브 클래스의 생성자에서 슈퍼 클래스의 생성자를 호출할 때 사용한다.
  • 오버로딩과 오버라이딩은 자바에서 다형성을 이루는 방법들이다.
  • 오버라이딩: 슈퍼 클래스의 메소드를 이름, 매개변수, 타입과 개수, 리턴 타입을 모두 동일하게 서브 클래스에 재작성하는 경우이다.
  • 오버로딩: 한 클래스나 상속 관계에 있는 클래스들 사이에 메소드의 이름은 같지만, 매개변수 타입이나 개수가 다르게 메소드를 작성하는 경우이다.
비교 요소 메소드 오버로딩 메소드 오버라이딩
선언 같은 클래스나 상속관계에서 동일한 이름의 메소드 중복 작성 서브 클래스에서 슈퍼 클래스에 있는 메소드와 동일한 이름의 메소드 재작성
관계 동일한 클래스 내 혹은 상속 관계 상속 관계
목적 이름이 같은 여러개의 메소드를 중복 작성하여 사용의 편리성 향상, 다형성 실현 슈퍼 클래스에 구현된 메소드를 무시하고 서브 클래스에서 새로운 기능의 메소드를 재정의하고자 함. 다형성 실현
조건 메소드 이름은 반드시 동일하고, 매개변수 타입이나 개수가 달라야 성립 메소드의 이름, 매개변수 타입과 개수, 리턴 타입이 모두 동일하여야 성립
바인딩 정적 바인딩. 호출될 메소드는 컴파일 시에 결정 동적 바인딩. 실행 시간에 오버라이딩된 메소드 찾아 호출

Chap05-7 추상 클래스

  • 추상 메소드(abstract method): 선언은 되어 있으나 코드가 구현되어 있지 않은 ,즉 껍데기만 있는 메소드이다.
  • 추상메소드를 가지고 있으면 반드시 추상 클래스로 선언되어야 한다.
  • 추상 클래스는 객체를 생성할 수 없다.
  • 추상클래스는 단순히 상속받는 서브 클래스는 추상 클래스가 된다.

추상클래스의 용도

  • 응용프로그램의 설계와 구현을 분리할 수 있다.
  • 계층적 상속 관계를 가지는 클래스들의 구조를 만들 때 적합하다.

Chap05-8 인터페이스

  • 인터페이스: 스펙을 주어 클래스들이 그 기능을 서로 다르게 구현할 수 있도록 하는 클래스의 규격 선언, 클래스의 다                      형성을 실현하는 도구이다.
  • 인터페이스 구성
    • 상수와 추상 메소드
    • default 메소드
    • private 메소드
    • static 메소드
  • 추상 메소드는 public abstract로 정해져 있으며, 생략될 수 있고, 다른 접근 지정으로 지정될 수 없다.
  • default, private, static 메소드들은 모두 인터페이스 내에 코드가 작성되어 있어야 한다.
  • default 메소드의 접근 지정은 public으로 고정되어 있다.
  • private 메소드는 인터페이스 내에서만 호출 가능하다.
  • static 메소드의 경우 접근 지정이 생략되면 public이며, private으로 지정될 수 있다.

 

  • 인터페이스는 객체를 생성할 수 없다.
    • 인터페이스에 구현되지 않은 추상 메소드를 가질 수 있기 때문에 객체를 생성할 수 없다.
  • 인터페이스 타입의 레퍼런스 변수는 선언 가능하다.
  • 인터페이스끼리 상속된다
  • 인터페이스를 상속받아 클래스를 작성하면 인터페이스의 모든 추상 메소드를 구현하여야 한다. 

 

인터페이스와 추상 클래스 비교

  • 비슷한점
    • 객체를 생성할 수 없고, 상속을 위한 슈퍼 클래스로만 사용된다.
    • 클래스의 다형성을 실현하기 위한 목적이다.
비교 목적 구성
추상 클래스 추상 클래스는 서브 클래스에서 필요로 하는 대부분의 기능을 구현하여 두고 서브 클래스가 상속받아 활용할 수 있도록 하되, 서브 클래스에서 구현 할 수밖에 없는 기능만을 추상 메소드로 선언하여, 서브 클래스에서 구현하도록 하는 목적(다형성) -추상 메소드와 일반 메소드 모두 포함
-상수, 변수 필드 모두 포함
인터페이스 인터페이스는 객체의 기능을 모두 공개한 표준화 문서와 같은 것으로, 개발자에게 인터페이스를 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상 메소드를 만들도록 하는 목적(다형성) -변수필드는 포함하지 않음
-상수, 추상 메소드, 일반 메소드, default 메솓, static 메   소드 모두 포함
-protected 접근 지정 선언 불가
다중 상속 지원

명품 JAVA Programming - 황기태, 김효수 - 내용을 정리한 내용입니다.