본문 바로가기
프로그래밍 언어/자바 (Java)

[자바(Java) 공부하기] 19. 상속 - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 7. 19.
728x90
반응형

 

Java에서 상속이란 부모 클래스의 멤버를 자식 클래스에게 물려주는 것을 말합니다.

프로그램에서는 부모 클래스 상위 클래스라고 부르고, 자식 클래스 하위 클래스라고 부릅니다.

현실에서 상속은 부모가 자식을 선택해서 물려주지만, 프로그램에서는 자식이 부모를 선택합니다.

자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지 결정하고, 선택된 부모 클래스는 extends를 적어 그 뒤에 나타내줍니다.

 

상속은 반복적으로 들어가는 공통적인 부분 빼서 묶어주고 따로 속성을 추가적으로 지정할 수 있습니다.

따라서 상속을 사용하면 공통적인 부분을 일일이 기능 구현해 줄 필요가 없어지고, 코드도 쓸데없이 길어지지 않고 깔끔해져 나중에 수정할 때도 공통적인 부분 하나만 수정해 주면 되기 때문에 유지 보수가 쉽다는 장점이 있습니다.

 

Java에서 상속할 때 여러 개의 부모 클래스를 상속할 수 없이 extends 뒤에는 단 하나의 부모 클래스만 와야 합니다.

또한 부모 클래스에서 private 접근 제한을 갖는 필드와 메서드는 상속 대상에서 제외되고, 만약 부모 클래스와 자식 클래스가 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메서드도 상속 대상에서 제외됩니다.

현실에서 부모 없는 자식이 있을 수 없듯, Java에서도 자식 객체를 생성하면, 부모 객체가 먼저 생성되고 그다음에 자식 객체가 생성됩니다.

모든 객체는 클래스의 생성자를 호출해야만 생성되며, 부모 객체도 예외는 아닙니다.

부모 생성자 자식 생성자의 맨 첫 줄에서 호출되며, super();를 사용하여 부모의 기본 생성자를 호출합니다.

 

super 키워드는 부모 클래스로부터 상속받은 필드나 메서드를 자식 클래스에서 참조하는 데 사용하는 참조 변수입니다.

부모 클래스의 멤버와 자식 클래스의 멤버 이름이 같을 경우 super 키워드를 사용하여 구별할 수 있습니다.

Java에서는 super 참조 변수를 사용하여 부모 클래스의 멤버에 접근할 수 있는데 this와 마찬가지로 super 참조 변수를 사용할 수 있는 대상도 인스턴스 메서드뿐이며, 정적 메서드에서는 사용할 수 없습니다.

super 키워드는 super.부모 메서드(); 형식이나 super.부모 필드; 형식으로 사용됩니다.

반응형

클래스를 선언할 때 final 키워드를 사용하면 이 클래스는 최종적인 클래스이므로 상속할 수 없는 클래스가 됩니다.

final 클래스의 대표적인 예는 Java 표준 API에서 제공하는 String 클래스입니다.

메서드를 선언할 때도 final을 붙이면 최종적인 메서드이므로 재정의할 수 없는 메서드가 됩니다.

부모 클래스를 상속해서 자식 클래스를 선언할 때 final 메서드는 자식 클래스에서 재정의 할 수 없습니다.

 

부모 클래스의 모든 메서드가 자식 클래스에 맞게 설계되어 있다면 가장 이상적인 상속이지만, 어떤 메서드는 자식 클래스가 사용하기에 적합하지 않을 수도 있습니다. 이런 경우 상속된 일부 메서드 자식 클래스에서 다시 수정해야 합니다.

Java에서 이런 경우 메서드 재정의(오버라이딩) 기능을 제공합니다.

메서드를 재정의 할 때는 재정의 전에 @Override를 적어주어 소스코드에 정보를 줍니다.

메서드 재정의 시 부모의 메서드와 동일한 시그니처(리턴 타입, 메서드 이름, 매개변수 목록)를 가져와야 하며, 접근 제한을 더 강하게 재정의 할 수 없습니다. 또한 새로운 예외(Exception) throws 할 수 없습니다.

 

728x90
반응형