상속과 관련된 짧은 생각

froajnzd·2024년 7월 4일
0

java

목록 보기
2/11
post-thumbnail

상속관계를 결정하는 클래스는 누구일까?

상속관계를 만드는 클래스는 자식클래스이다.
Class를 상속하고 싶을 때, 상속하려는 클래스에서 extends ParentClass 라는 용어를 붙여 상속을 할 수 있다.

즉, 자식만 부모를 결정할 수 있다!

생성자도 상속되는 걸까?

클래스에는 { 필드, 생성자, 메소드 }가 있는데, 상속 시 필드, 메소드 모두 상속되는 것을 알고 있다.
그럼 생성자도 상속되는 것일까?

결론부터 말하자면, 생성자는 상속되지 않는다. 생성자는 객체를 만들 때 호출되는 특별한 메소드인데, 이 메소드는 부모 클래스에서 자식 클래스에 자동으로 전달되지 않는다. 대신, 자식 클래스의 생성자에서 부모 클래스의 생성자를 super 키워드를 사용하여 직접 호출해야 한다.

이렇게 하는 이유는 객체가 생성될 때 부모 클래스의 초기화가 먼저 이루어지도록 하기 위해서다.

만약 생성자가 상속된다면, 객체 초기화 순서를 제대로 관리하기 어려울 것이다. 또한, 부모 클래스의 초기화 방법이 변경되었을 때 자식 클래스가 제대로 대응하지 못할 수도 있다. 그래서 Java에서는 생성자가 상속되지 않고, 자식 클래스에서 명시적으로 부모 클래스의 생성자를 호출하도록 되어 있다.

A,B중 누가 부모, 자식일까?

Java에서 상속은 확장성을 위해 사용한다.
그러므로 A의 기능을 사용하면서 추가적인 B의 기능까지 덧붙일 수 있는 B가 자식 클래스, A가 부모 클래스이다.

@Override 어노테이션은 꼭 사용해야 하나?

그렇지 않다.

@Override를 붙이지 않아도 Java가 알아서 부모 클래스의 오버라이드된 메소드를 삭제해준다. 그러나 @Override를 사용하는 것이 권장되는데, 이유는 다음과 같다.

  • 컴파일 타임 체크 : 메소드가 실제로 부모 클래스나 인터페이스의 메소드를 오버라이드하고 있는지 컴파일러가 확인한다.
    만약 메소드 선언이 잘못되었거나, 부모 클래스에 해당 메소드가 없다면 컴파일 에러가 발생하여 문제를 미리 발견할 수 있다.

  • 가독성 향상 : 다른 개발자가 코드를 읽을 때 해당 메소드가 오버라이딩 중임을 명확히 한다. (본인조차 포함된다!)

  • 유지보수 용이 : 부모 클래스의 메소드명을 변경할 경우, 자식클래스에 컴파일 에러가 나 빠르게 인지하고 변경할 수 있다.

profile
Hi I'm 열쯔엉

0개의 댓글