본문 바로가기
Java/기본 개념 및 클래스

[Java] 38. 상속 관계와 메서드 오버라이딩

글: Song hyun 2024. 4. 23.
728x90
반응형

[Java] 38. 상속 관계와 메서드 오버라이딩


1. 상속
(1) 상속(Inheritance): 기존에 존재하는 클래스로부터 필드(멤버변수)와 메서드를 이어받고,

필요한 기능을 추가할 수 있는 기법을 말한다.

 

-상속은 객체 지향 패러다임에서 중요한 개념 중 하나이다. 
-상속은 기존의 클래스를 확장하여 새로운 클래스를 정의하는 매커니즘을 뜻한다.
-상속을 통해 기존 클래스의 특성과 메서드를 재사용하고, 확장하여, 새로운 클래스를 만들 수 있다.

-상속을 통해 검증된 소프트웨어를 재사용할 수 있어, 신뢰성있는 소프트웨어를 손쉽게 개발, 유지할 수 있다는 장점이 있다. 또한 코드의 중복 역시 줄일 수 있다.

*객체 지향 패러다임의 많은 장점이 상속에서 비롯된다. 

 


(2) 부모 클래스/슈퍼 클래스(Parent class/Super class): 기존에 정의된 클래스이다. 상속의 대상이 된다.
자신의 클래스의 속성과 메서드를, 자식 클래스에게 상속한다.

(3) 자식 클래스/서브 클래스(Child class/Sub class): 부모 클래스를 확장해, 새롭게 정의하는 클래스이다.
부모 클래스의 모든 속성과 메서드를 상속받는다.

*객체 지향 패러다임(OOP): 객체와 객체가 상호작용을 하도록 코드를 작성하는 것.
(ex: [학생]이 [버스]를 탄다 = 학생과 버스가 상호작용을 한다.)

 

*상속 관계(부모 클래스-자식 클래스)를 형성해두면...

자식 클래스에서 객체를 선언하더라도, 부모 클래스에 먼저 생성되고-> 이후에 자식 클래스에 생성된다.

 

** 부모 클래스가 먼저 존재해야, 자식 클래스가 존재할 수 있다.

 


2. 상속의 사용

(1) 상속의 형식: class 자식/서브 클래스 extends 부모클래스

-extends: 확장/파생한다는 의미를 지닌 단어이다.

 

(2) 왜 상속을 사용할까?

(2-1) 상속은 간단하지만 아주 강력하다.

작성해야하는 코드와 유사한 코드가 존재한다면, 상속을 통해 간단하게 작성할 수 있다.

(2-2) 상속을 사용하면 중복되는 코드를 줄일 수 있다.

 

(3) Java 상속의 특징

(3-1) 다중 상속을 제공하지 않는다. (다중 상속= 여러 클래스들로부터 상속받는 것.)

(3-2) 상속의 횟수에 제한이 없다.

(3-3) 상속계층 최상위에는 java.lang.Object가 있다.

 

(4) 상속과 접근 지정자

: 상속과 Protected 접근 지정자가 함께 쓰이기도 한다.

protected는 동일한 클래스/패키지/자식클래스 까지 접근이 가능한 지정자이다.

 

(5) 상속과 생성자: 자식 클래스의 객체가 생성될 때, 부모 클래스의 생성자도 호출될까?

: 자식 클래스 안에는 부모 클래스에서 상속받은 부분이 포함되어 있다.

따라서 자식 클래스 안의 부모 클래스의 일부를 초기화하기 위해, 부모클래스의 생성자 역시 호출된다.

 

 


3. 메서드 오버라이딩

(1) 메서드 오버라이딩(Overriding): 자식클래스가 부모 클래스의 메서드를 본인의 필요에 맞춰. 재정의하는 것이다.

즉, 이는 자식 클래스에서, 부모 클래스에서 물려받은 메서드를 새롭게 구현하는 것을 일컫는다.

***이렇게 하면, 자식 클래스는 부모 클래스의 메서드를 덮어쓰게 된다.

이후 메서드를 호출 시, 부모 클래스가 아닌 자식 클래스 내부의 오버라이드 된 메서드가 호출된다.

 

(2) 어노테이션: 주석+힌트

 

(3) 키워드 super.: 부모/슈퍼 클래스를 호출하는 키워드이다. (참조 변수 this와도 유사하다.)

부모 클래스의 메서드를 오버라이딩한 경우, super를 사용할 경우 부모 클래스의 메서드를 호출할 수 있다.

 

**(4) 오버로딩 vs 오버라이딩: 헷갈리지 말자!

오버로딩(Overloading): 같은 메서드명을 가진 여러개의 메서드를 작성하는 것.

오버라이딩(Overriding): 부모 클래스의 메서드를 자식 메서드가 재정의하는 것이다.

728x90
반응형