ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 상속(Inheritance)이란?
    Java 2022. 1. 6. 00:01
    728x90

    상속(Inheritance)이란?

    객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나입니다.

    기본이 되는 클래스를 확장하여 새로운 클래스를 정의하는 것을 말합니다.

    Java의 클래스는 변수와 메서드로 구성되기 때문에 상속이란 기본이 되는 클래스에서 변수와 메서드를 물려받고 여기에 자식 클래스에서만 가지는 추가적인 특징을 추가합니다.

     

    기본이 되는 클래스는 부모 클래스, 기본 클래스, 상위 클래스 등으로 불립니다.

    상속된 클래스는 자식 클래스, 확장된 클래스, 파생 클래스, 하위 클래스로 불립니다.

    여기서는 부모 클래스와 자식 클래스로 부르도록 하겠습니다.

     

    다음 그림은 자바의 상속을 표현한 그림입니다.

    상속

    그러면 상속을 왜 사용할까요? 

    기존의 작성된 클래스의 재활용하여 효율적이다.

     

    자식 클래스 설계 시 중복되는 멤버를 미리 부모 클래스에 작성해 놓음으로써 자식 클래스에서는 해당 멤버를 작성하지 않음

     

    클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련

     

    자바 상속의 특징

    1. 부모 클래스와 자식 클래스는 논리적으로 is a 관계를 가집니다.

    프린터 부모 클래스가 위와 같은 자식 클래스로 구성되어 있습니다.

    도트 프린터는 프린터이다 (is a 관계)

    잉크젯 프린터는 프린터이다 (is a 관계)

    N사 카메라는 프린터이다 (is a 관계 성립x)

     

    is a 관계는 문법적으로는 문제가 없지만 소스코드에 대한 분석과 개발을 어렵게 만듭니다.

     

    2. 단일 상속만 허용합니다. (다중 상속을 허용하지 않습니다)

    하나의 클래스는 오직 하나의 부모 클래스만 상속할 수 있습니다.

    class Printer {
    	String printerName;
    	int price;   
    }
    
    class Camera {
    	String cameraName;
    	int price;    
    }
    
    class PolaroidCamera extends Camera, Printer {
    	
    }

    만약 다중 상속을 허용하게 된다면 price 변수가 중복되는 문제가 발생할 수 있습니다.

    모든 클래스의 변수 이름을 다르게 선언하면 이 문제가 일어나지 않지만 클래스를 만들 때 중복 가능성을 모두 예측할 수 없습니다.

    따라서 Java는 단일 상속만 지원하여 이런 문제점을 근본적으로 막습니다.

     

     

    3. 자식 클래스를 이용할 때 부모 클래스의 생성자가 자동으로 호출됩니다.

    만약 부모 클래스가 매개변수를 포함한 명시적 생성자 선언이 있었는데, 자식 생성자에서 호출해주지 않는다면 에러가 발생하게 됩니다.

     

    4. 부모 클래스의 private 변수는 자식 클래스로 상속되지 않습니다.

    private으로 선언된 변수는 선언된 클래스 내부에서만 사용이 가능하기 때문에 상속되지 않습니다.

     

    5. 부모 클래스와 같은 이름의 인스턴스 변수를 자식 클래스가 가지고 있다면 해당 변수는 상속되지 않습니다.

     

    6. 부모 클래스의 메서드를 재사용하지 않고 새롭게 정의하여 사용할 수 있습니다.

    이를 메서드 오버 라이딩이라 합니다.

    class Printer {	
        int price;
        String printerName;
        
        public void printExplain(){
        	System.out.println("이건 프린터입니다");
        }
        
    }
    
    class DotePrinter extends Printer{
    	String dotePrintNumber;
        
        public void printExplain(){
        	System.out.println("이건 도트프린터입니다");    
        }
    
    }

     

    상속의 사용법

    extends 예약어를 사용

     

    상속이라는 의미를 가진 Inheritance라는 예약어 대신에 확장이라는 의미인 extends를 사용하는 이유는?

    상속은 부모 클래스를 그대로 가져오는 것이 아니라 추가적인 것들을 확장한다는 의미가 중요하기 때문입니다.

     

    public Class Parent{ .... }; // 부모 클래스
    public Class Child extends parent { .... }; // 자식 클래스

    상속받고자 하는 자식 클래스명 옆에 extends 예약어를 붙이고 상속할 부모 클래스명을 적습니다.

     

     

     

    출처

    http://www.tcpschool.com/java/java_inheritance_concept

     

    코딩교육 티씨피스쿨

    4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

    tcpschool.com

    https://swexpertacademy.com/main/main.do

     

    SW Expert Academy

    SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

    swexpertacademy.com

    https://chanhuiseok.github.io/posts/java-1/

     

    자바(JAVA) - 상속(Inheritance) (1) 클래스 상속, 부모 생성자의 호출

    상속이란?

    chanhuiseok.github.io

     

    728x90

    'Java' 카테고리의 다른 글

    [Java]람다식(Lambda expression)이란?  (0) 2022.01.17
    [Java] 내부 클래스란?  (0) 2022.01.11
    [Java] 오버로딩(Overloading)이란?  (0) 2022.01.05
    [Java] 자바 Enum이란?  (0) 2022.01.01
    [Java] 제네릭/지네릭스(Generics)란?  (0) 2021.12.30

    댓글

Designed by Tistory.