brunch

You can make anything
by writing

C.S.Lewis

JAVA 상속의 개념

* 이 내용은 철저히 초심자를 위해 알기 쉽게 설명하는 것을 목적으로 하고 있습니다.

* 더 정확하고 자세한 개념은 다른 고수님들의 글들을 참고하시길 바랍니다.

* 그리고 이 글에서는 코드 최소한으로 다루고 있습니다.


우린 OOP 4대 특성 중 캡슐화에 대해서 알아보았습니다.

오늘은 두 번째 특성인 상속(inheritance)에 대해서 알아보도록 하겠습니다.


상속이란 나에게 없는 것을 부모에게 물려받아 내 것처럼 사용하는 것을 의미합니다.

여기서 중요한 것은 바로 ‘내 것처럼’ 사용한다는 것입니다.

생각해 보면 누군가 부모님으로부터 엄청난 재산을 물려받았을 때, 그 재산을 부모님에게 허락받아서 사용하지 않습니다. 내 것처럼 쓰고 싶을 때 쓰죠?


이 상속은 분류(classification)의 개념으로도 설명 가능 합니다.

고양이, 사람, 강아지는 모두 포유류의 분류에 속합니다.

그리고 포유류의 분류에 속하기에 포유류 특성인 새끼를 낳고 젖을 먹이는 특성을 가지고 있습니다.

이는 포유류의 특성을 상속받았다고도 할 수 있습니다.

그래서 우린 상속을 일반화라고표현하기도 합니다.(물론 그렇게 부르는 경우는 매우 드뭅니다.)


아무튼 상속이라는 것은 부모로부터 무언가를 받아서 내 것처럼 쓰는 것을 의미합니다.

그럼 이런 상속을 하는 이유는 무엇일까요?

우리가 현실에서 상속을 받으면 어떤 점이 좋아지는지 생각해 보면 쉽게 알 수 있습니다.


잠깐!

나에게 없는 걸 사용한다는 것은 이미 객체 화를 통해 다른 클래스의 내용을 복사해서 사용한 적이 있었죠?

그렇다면 객체화와 상속 과의 차이는 뭐죠?

바로 남의 클래스 멤버를 빌려서 사용하는 것과, 원래 나에게 있던 것처럼 사용하는 차이가 있습니다.

이 차이에 대해서는 뒤에서 좀 더 자세히 다루겠습니다.


다시 현실세계의 상속에 대해서 알아봅시다.

우리는 부모님에게 상속을 받을 때 부모님의 모든 재산을 상속받진 않습니다.

부모님께서 상속해 주신 것에 대해서만 받을 수 있습니다.

예를 들어 부모님께서 상속해 주겠다고 공개하신 것에 대해서는 상속받을 수 있겠으나 비밀 금고에 숨겨두신 재산에 대해서는 상속받을 수 없습니다.


자바에서도 부모 클래스 밖으로 빠져나갈 수 없는 private 접근 제한자가 있는 멤버는 자식이 상속해 갈 수 없습니다.


상속의 개념에 대해서 알아보았습니다.

정리하자면, 상속이란 부모로부터 받은 기능을 내 것처럼 사용하는 것입니다.

그리고 private과 같이 클래스를 빠져나올 수 없는 멤버는 상속이 불가능합니다.


이제 이런 상속을 그럼 자바에서는 어떻게 코드로 나타내는지 알아볼까요?

위 코드에서 Puppy(강아지)는 Mammal(포유류) 클래스를 상속받았습니다.

이때 사용하는 키워드는 상속을 의미하는 inheritance 가 아니라 확장을 의미하는 extends라는 것을 기억합시다.

왜 상속이라고 부르고 확장이라는 단어를 사용할까요?

이는 기능의 확장이라는 뜻이라고 받아들일 수 있습니다.


상속에 대한 개념이 이해가 되시나요?

아마 이해는 되겠으나 의문이 남는 것들이 있을 것입니다.

우선 상속을 받는 것이 객체화를 사용해 쓰는 것과 무엇이 다른지부터가 그렇죠?

그런 것들은 앞으로 하나씩 의문을 풀어가며 진행해 보도록 하겠습니다.

매거진의 이전글 import 문과 캡슐화
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari