Dev/Java

상속 - 개념편

Anews 2024. 10. 2. 20:42
시작하기에 앞서
더보기

해당 주제에 대해서 계속 블로그를 작성하고 싶었다.

하지만 정확하게 알지 못하는 내용을 작성하면 안 된다는 생각에 사로잡혀있다가

다른 분의 블로그에서 "과거의 흔적을 보고 이불킥 한다는 건 내가 그만큼 성장했다는 증거다"라는 문장을 보고

잘 몰라도 작성해 보기로 하였다.

 

상속은 아주 오래전부터 추상화, 다형성, 캡슐화와 같이 나에게 목에 걸린 가시 같은 느낌이었다

개발을 본격적으로 해보지 않았고 주니어 개발자라는 말조차 부담스러운 나에게

상속과 인터페이스를 몰라도 개발에 문제가 있던 적은 없다

하지만 어느 강의든 자바의 기초에서 상속, 추상화, 다형성, 캡슐화는 무조건 다루고 있는 점을 미루어 보아

객체지향을 다룸에 있어 필수적인 건 틀림없다

이런 말도 들었다 상속, 추상화, 다형성, 캡슐화를 이해하지 못해서 이것만 잡고 있다 보니까

진도를 나가지 못한다고 하니 내배캠의 튜터님께서는 개발을 시작한 지 10년이 지났는데

상속이 뭐예요 추상화가 뭐예요 하면 본인조차도 모든 걸 이해하고 답변하지 못한다

그러니 직접 손으로 코딩해 보면서 조금씩 나아가 보라고 하셨다.

그래서 머리만 싸매고 있는 게 아니라 직접 손으로 나아가면서 또한

완벽하게 이해하는 건 조금 미루고 지금이라도 개념적 용어일지라도 

정리를 해보고자 한다.

그 첫 번째 상속이다.


상속
더보기
상속이란
상속(Inheritance)이란 기존 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다.

상속을 이용하면 기존에 정의되어 있는 클래스의 모든 필드와 메서드를 물려받아, 새로운 클래스를 생성할 수 있다.
이때 기존에 정의되어 있던 클래스를
부모 클래스(parent class), 상위 클래스(super class), 기초 클래스(base class)라고도 한다.
그리고 상속을 통해 새롭게 작성되는 클래스를
자식 클래스(child class), 하위 클래스(sub class), 파생 클래스(derived class)라고 한다.

 

상속의 장점
1. 기존에 작성된 클래스를 재활용할 수 있다.
2. 자식 클래스 설계 시 중복되는 멤버를 미리 부모 클래스에 작성해 놓으면, 자식 클래스에서는 해당 멤버를 작성하지 않아도 된다.
3. 클래스 간의 계층적 관계를 구성함으로써 다형성의 문접적 토대를 마련한다.(이건 진짜 무슨 소리인지 모르겠다.)

 

자식 클래스(child class)
자식 클래스(child class)란 부모 클래스의 모든 특성을 물려받아 새롭게 작성된 클래스를 의미한다.

< 문법 예시 >
class 자식클래스이름 extend 부모클래스이름 { ... }


< 포함 관계 이미지 >

이처럼 부모 클래스는 자식 클래스에 포함된 것으로 볼 수 있다.
따라서 부모 클래스에 새로운 필드를 하나 추가하면, 자식 클래스에도 자동으로 해당 필드가 추가된 것처럼 동작한다.
*자식 클래스에는 부모클래스의 필드와 메서드만 상속되며, 생성자와 초기화 블록은 상속되지 않으며
부모 클래스의 접근제어가 private이나 default라면 설정된 멤버는 자식 클래스에서 상속은 받지만 접근은 불가하다.