[JAVA]객체지향 핵심 - 상속

Date:     Updated:

카테고리:

태그:

[17] 객체지향 핵심 - 상속

17.1. 클래스 상속

  • 상속(Inheritance) : 클래스를 구현할 때, 다른 클래스의 속성이나 기능을 가져오는 것
    • 구현해 둔 기존 클래스보다 더 구체적인 기능을 가진 클래스를 구현하고자 할 때 사용

17.2. 상속의 구조

  • A클래스가 B클래스에게 상속한다.
    • = B클래스가 A클래스를 상속받는다.
  • 상속하는 클래스
    • 상위 클래스, parent class, base class, super class
  • 상속받는 클래스
    • 하위 클래스, child class, derived class, sub class

17.3. 상속의 문법 형태

  • extends 키워드
    • 하나의 클래스만 올 수 있다
    • 자바 단일 상속(Single inheritance)만 지원
        class B extends A {
      
        }
      

      17.4. 상속의 구현

  • 상위 클래스는 하위 클래스보다 더 일반적인 개념과 기능을 가진다
  • 하위 클래스는 상위 클래스보다 더 구체적인 개념과 기능을 가진다
    • 상속에서의 확장(Extend) : 하위 클래스는 상위 클래스의 속성과 기능을 상속받는다

17.5. 상속에서의 클래스간 관계

  • is a 관계 : ~ 은(는) ~ 이다(is a relationship : Inheritance)
    • 서로 직접적인 관계에 있다
    • 만들 클래스에 영향을 가장 많이 주는 클래스를 상속받는다
  • 일반적인(general) 개념과 구체적인(specific) 개념과의 관계
    • 상위 클래스 : 하위 클래스보다 일반적인 개념
    • 하위 클래스 : 상위 클래스보다 구체적인 개념들이 더해짐
    • 클래스간 결합도가 높은 설계(디자인)
  • 상위 클래스의 수정이 하위 클래스에 영향을 미칠 수 있다
    • AppCompatActivity / Activity
  • 계층구조가 복잡하거나 Hierarchy가 높을 경우 부적합

17.5.2 상속에서의 클래스간 관계 2 - is a 관계와의 비교

  • has a 관계 : ~은(는) ~을(를) 가지고 있다(Composition)
    • 보조적일 경우 포함관계로 정의
      • 다중 상속의 대안으로 사용가능
      • 클래스의 멤버변수로 다른 클래스를 선언
      • 작은 규모의 클래스들을 조합해 큰 규모의 클래스를 만들 수 있다
    • 클래스가 다른 클래스를 포함하는 관계(변수로 선언)
      • 코드 재사용의 가장 일반적인 방법
      • 상속과 다르다

17.6. Object 클래스

  • 모든 클래스의 조상이 되는 클래스
    • 일반적으로 사용자 정의 클래스는 자동으로 Object를 상속받는다

17.7. 접근 제한자 protected

  • 외부클래스에 대해서는 private, 하위클래스에 대해서는 public으로 동작하도록 하는 기능을 가진 예약어
  • 상위 클래스의 변수 및 메서드에 선언할 경우 외부클래스의 접근을 제한
  • 상속을 받은 하위클래스에서 사용 가능

17.8. 접근 제한자(Access Modifier)의 제한 범위 정리

  외부클래스 하위클래스 동일패키지 내부클래스
public O O O O
protected X O O O
default(선언X) X X O O
private X X X O

17.9. 상속에서의 클래스 생성 과정

  • 하위 클래스 생성 시, 상위 클래스 먼저 생성
    • ex) new VIPCustomer() 클래스 생성 : 상위 클래스인 Customer()를 먼저 호출
  • 상위 클래스의 생성자 호출 이후, 하위 클래스의 생성자 호출

  • 하위 클래스에 상위 클래스의 생성자를 호출하는 코드가 없는 경우
    • 상위 클래스의 기본 생성자를 호출하기 위해 컴파일러가 자동으로 예약어 super()를 추가한다
      • super() : 상위 클래스의 기본 생성자
    • 상위 클래스에 기본 생성자가 없는 경우(매개변수가 있는 생성자만 있을 경우)
      • 하위 클래스에서 상위 클래스의 생성자 명시 필요
  • 상속에서의 인스턴스 메모리
    • 상위 클래스의 인스턴스가 생성된 이후에 하위 클래스의 인스턴스 생성

17.10. 상위 클래스로의 묵시적 형 변환 (Upcasting)

  • 하위 클래스의 인스턴스 생성 시, 상위 클래스의 클래스 형을 자료형으로 선언 가능

      ex)
      - 인스턴스 VIPCustomer() 자료형을 상위 클래스의 클래스 형인 Customer로 선언
        
         상위 클래스의 클래스 (Type)
         -------- 
         Customer customer = new VIPCustomer(20220902, "이방원");
                                            -------------------
                                            하위 클래스의 생성자
            
          - VIPCustomer() 생성자를 통해 인스턴스 생성      
          - 자료형에 따라 Customer의 변수와 메서드만 접근 가능
    
  • 상위 클래스 → 하위 클래스 형 변환은 불가

17.11. 메서드 오버라이딩(Overriding)

  • 조상 클래스에서 상속받은 메서드를 자손 클래스에 적합하도록 구현부를 수정하는 것
    • 동일한 이름으로 재정의 가능
    • 주로 상위 클래스에 정의된 메서드가 하위 클래스에서 구현할 내용과 맞지 않는 경우 사용
    • 반드시 메서드의 선언부(리턴 타입, 메서드명, 매개변수)가 동일해야 한다
    • 수정(Modify) 및 Change(변경)의 개념

17.12. 오버로딩(Overloading)

  • 매개변수의 개수, 타입, 순서가 다른 경우 사용
  • 서로의 매개변수 이름 및 리턴타입과는 무관
  • 새로운 메서드를 만드는 것(New)

17.13. 애노테이션 (annotation)

  • 원 의미 : 주석
  • 컴파일러에게 특별한 정보를 제공하는 역할
    @Override
    // 재정의된 메서드라는 정보 제공 
    

17.14. [예제] 고객관리 프로그램 - 멤버쉽

  • 고객 등급에 따라 차별화된 서비스 제공
    • 할인율, 적립금 차등 적용
  • 고객 등급별 클래스 정보

    1. Customer 클래스(일반 고객)
      • 속성
        • 고객 아이디
        • 고객 이름
        • 고객 등급
        • 보너스 포인트
        • 보너스 포인트 비율
        • 물품 구매시 1%의 보너스 포인트 적립
          • ex) 10,000원 상당의 상품 구매 시 100원 적립
      • 기본 등급 : SILVER
    2. VIPCustomer 클래스(우수고객)
      • Customer 클래스를 상속받아 기능을 확장하여 구현
      • 매출에 더 많은 기여를 하는 단골고객에게 혜택
        • 제품 구매시 10% 할인
        • 보너스 포인트 5% 적립
        • 담당 상담원 배정
    3. GoldCustomer 클래스(중간 등급 고객)
      • VIP 고객만큼 많이 구입하지는 않으나 이용 빈도가 높은 고객을 GOLD 등급으로 관리
      • 혜택
        • 제품 구매시 10% 할인
        • 보너스 포인트 2% 적립
        • 담당 상담원 미배정

JAVA 카테고리 내 다른 글 보러가기

댓글 남기기