본문 바로가기
CSE/CP1 이론

CP1_07. 객체지향프로그래밍_Advanced_1. 계승

by 0/0 2024. 6. 11.
1. Basics 클래스, 객체, 변수, 메서드 // 생성자, 초기화
2. Advanced 상속, 오버라이딩 // package, import, modifiers, 다형성 // 추상클래스, interface, 내부클래스
1. 계승 1. 계승의 정의
2. 클래스 계승 관계와 인스턴스 객체 
3. 클래스 간의 관계
4. Object 클래스

 

1.1 계승(Inheritance)의 정의 '이미 있는 것을 그대로 활용해서 새로운 것 만들어내기'

-계승(상속): 기존의 클래스를 재사용하여 새로운 클래스 작성

  •   장점
    -코드의 추가 및 변경이 매우 용이
    -코드의 재사용성을 높이고 코드의 중복 제거 -> 프로그램 생산성과 유지보수에 기여 

계승(상속)

  • 계승에 필요한 두 클래스
    -상위(super) 클래스 = 부모, 조상, 기반(c++용어)
    -하위(sub) 클래스 = 자손, 자식, 파생된(c++용어)
  • 하위클래스는 상위클래스의 모든 멤버(필드)를 이어받음
    -하위 클래스에 새로운 코드가 추가되어도 상위 클래스는 아무 영향X
    -생성자와 초기화 블록은 상속되지 않음(멤버만 상속됨)
  • 표현 방법
class Parent{
//...
}

class Child1 extends Parent {
//...
}

class Child2 extends Parent {
//...
}

class GrandChild extends Child1 {
//...
}

클래스 다이어그램

 

1.2 클래스 계승 관계와 인스턴스 객체 

하위 클래스의 인스턴스 생성은 상위 클래스의 멤버와 하위 클래스의 멤버가 합쳐진 하나의 인스턴스 생성으로 볼 수도 있음

 

1.3 클래스 간의 관계

  • 바람직한 상위-하위 클래스 관계 만들기
    하위 클래스들의 공통적인 부분은 상위 클래스에서 관리하고 개별 부분은 하위 클래스에서 관리하도록 처음부터 신경쓰기
  • 포함 관계
    - 클래스의 멤버변수로 다른 클래스를 선언하는 것
    - 단위 별로 여러 개의 클래스를 작성, 이 단위 클래스들을 조합(포함)해서 하나의 커다란 클래스를 생성

포함 관계

  • 계승 관계 vs 포함 관계
    -계승: is-a 관계 ex)원은 점이다 ... X
    -포함: has-a 관계 ex)원은 점을 포함한다 ...O
    *계승 관계는 꼭 필요할 때 아니면 자제하자

  • 예제 코드

클래스 간의 관계

  • 예제 코드 설명
    계승 관계와 포함 관계 모두 표현되어 있음
    -의문점1: 왜 이미 상위 클래스인  Shape에서 정의된 void draw()를 하위 클래스들이 다시 정의하고 있을까?
      -> 다음 포스팅 '오버라이딩'에서 계속됩니다
    -의문점2: main 코드에서 Circle c = new Circle(p2, 7); 에 있는 p2 int가 아닌데 괜찮나?

 

1.4 Object 클래스

: 모든 클래스의 조상

다른 클래스로부터 계승 받지 않는 클래스는 자동으로 Object 클래스를 계승받음(컴파일러가 자동으로 추가)
-> 모든 클래스는 Object 정의된 유용한 메서드를 기본적으로 계승 받음 ex) toString(), equals(Object to), ...