자바의 상속관계

JJ·2024년 7월 4일

backEnd

목록 보기
3/16

상속

네이버 국어 사전을 찾아보면 상속의 정의는 '일정한 친족 관계가 있는 사람 사이에서,
한 사람이 사망한 후에 다른 사람에게 재산에 관한 권리와 의무의 일체를 이어 주거나, 다른 사람이 사망한 사람으로부터 그 권리와 의무의 일체를 이어받는 일' 이라고 나와있다.

자바에도 상속이라는 개념이 존재하는데 우리의 일상생활에서의 상속과 어떤 공통점과 차이점이 있을까?

자바의 상속

자바에서의 상속은 부모 클래스의 속성과 메소드를 자식의 클래스가 그대로 가져와 쓸 수 있고, 메소드를 재정의(오버라이딩)해 사용할 수 있는 것이다.
동일한 메소드를 사용하는 클래스들이 여러 개라면 부모 클래스를 하나 만들어두고 여러 자식 클래스들에게 상속해주는 것이 편리할 것이다.

자식 클래스는 부모 클래스를 extends 해서 상속받을 수 있다.
extend는 확장이라는 의미를 갖고 있는데, 자식 클래스는 부모 클래스에서 상속받은 메소드 뿐만 아니라 추가적으로 메소드를 정의해서 사용할 수 있다.

상속 이미지

상속관계를 그림으로 표현해보자면 대략적으로 위와 같은 그림으로 표현할 수 있을 것 같다. 부모클래스에서 상속받은 메소드나 멤버 뿐만 아니라 더 많은 것을 정의해서 사용할 수 있으니 말이다.

오버로딩? 오버라이딩?

자바에는 상속에서 쓰이는 오버라이딩 말고 오버로딩이라는 것도 있다.
이 둘은 무슨 차이가 있을까?

오버로딩은,

  • 똑같은 이름을 가진 메소드가 여러 개 있을 수 있는 것을 말한다.
    물론 완전히 똑같은 메소드는 아니고 매개변수의 개수나 타입에 차이가 있는 동일한 이름의 메소드들이다.

  • 오버로딩의 경우, 매개변수에 차이가 있다면 리턴 타입을 다르게 해도 상관이 없다.

오버라이딩은,

  • 상속관계에서 부모에게 상속받은 메소드를 자식 클래스에서 재정의 하는 것이다.

  • 오버라이딩의 경우 메소드 이름/매개변수/리턴 타입이 동일해야 한다. 오버라이딩을 의도하고 코드를 작성했는데 셋 중 하나가 만약에 다르다면 컴파일 에러가 발생할 것이다.

  • 또한, 오버라이딩 할 때 해당 메소드의 접근 제한자가 부모 클래스에서 선언한 범위보다 넓거나 같아야 한다. 좁히는 것은 불가능하다.

자바의 오버라이딩

오버라이딩에 대해 더 자세히 알아보자!

@Override

오버라이딩을 할 때에는 @Override를 붙여주고 오버라이드 한다.
'@Override'를 override annotation이라고 부르는 데, annotation은 '주석'이라는 의미이다.

사용 이유

그러면 굳이 오버라이드 어노테이션을 해주지 않아도 오버라이딩 할 수 있지만 왜 오버라이드 어노테이션을 쓰는걸까?
오버라이드 어노테이션을 쓰는 이유는 크게 두 가지 이유가 있다.

첫 번째 이유는 자식 클래스에 메소드가 여러 개일 때, 어떤 메소드가 오버라이드한 메소드인지 알기 쉽게 하기 위함이다.
두 번째 이유는 오버라이드한 메소드에 오타나 놓친 매개변수 등이 있는지를 확인해 컴파일 오류를 잡기 위함이다.

참고: 오버라이딩 어노테이션

profile
🎀👩🏻‍💻✨🐾🌷🦅

0개의 댓글