알버트의 개발하는 블로그

자바 제15강 : 상속 (Inheritance)과 함수 재정의(override, 메소드 오버라이드) 본문

프로그래밍 언어/Java

자바 제15강 : 상속 (Inheritance)과 함수 재정의(override, 메소드 오버라이드)

알버트 2021. 9. 10. 10:16

 

이번 시간에는 자바의 상속 기능과 메소드 오버라이딩에 대해서 알아보겠습니다. 상속이란 것은, 상속받는 자식 클래스가 상속받은 부모 클래스의 변수와 함수를 자유롭게 쓸 수 있다는 것입니다. 그래서 객체를 만들었을 때 생성되는 부모클래스의 함수도 그대로 상속받아서 사용하게 되는데요. 부모의 함수를 그대로 갖다가 쓰기 때문에 자식 클래스에서 메소드를 다르게 쓰고 싶을 때는 메소드 오버라이딩(재정의)을 해야 합니다.

 

 

간단하게 요약하자면,

상속 : 자식 클래스가 부모 클래스의 변수와 함수를 상속받아서 사용할 수 있는 것

함수 재정의( 메소드 오버라이드) : 기존 함수의 정의를 쓰지 않고 재정의해서 사용하는 것. 함수명은 똑같으나 다른 기능을 갖추게 된다.

이와 같습니다. 이제 간단한 예제를 통해서 상속과 메소드 오버라이드에 대해 배워보겠습니다.

 


상속과 메소드 오버라이드 예제

먼저 부모 클래스를 이렇게 구성해주었습니다. 변수는 name과 gender를 선언해주었습니다. 기본 생성자에서 this를 통해서 초기화해주었고, 기본 생성자가 실행되었다는 문장이 출력되게 해주었습니다.

두번째 생성자로는 입력받은 값으로 초기화해주는 생성자를 써주었습니다.

 

 

 

public class Child extends Parent {
...
}

 

 

다음으로 Parent클래스를 상속받을 Child 클래스입니다. 자바에서는 클래스를 상속받기 위해서 'extends'라는 단어를 써주어야 합니다. 즉, "자식클래스명 extends 부모클래스명" 이렇게 위 코딩처럼 해주어야 부모 클래스를 상속받을 수 있습니다.

Child클래스에서 메소드 오버라이드가 나오는데요. 위 코딩에서 마지막 toString부분이 없다면 toString을 출력했을 때 부모클래스의 toString이 나오게 됩니다. 따로 재정의해주지 않았으니까요. 그래서 저렇게 위코딩처럼 메소드를 재정의해서 사용해주면, Child클래스만의 toString을 쓸 수 있습니다.

 

 

 

메인 함수에서는 이렇게 코딩해서 부모 클래스와 자식 클래스의 생성자를 만들고 실행해 주었습니다.

Parent클래스에서 기본생성자와 정의된 생성자로 2개의 객체를 만들고 toString메소드를 출력해주었습니다.

Child클래스에서도 똑같이 객체를 만들고 toString을 출력해보았습니다. 부모클래스에서 상속받은 name과 gender을 자식 클래스가 그대로 사용하는 걸 볼 수 있습니다. (super(name, gender)코드로 사용가능)

 

 

이제 한번 실행해볼까요?

 

 

 

이렇게 실행되는 것을 볼 수 있습니다.

첫줄이 기본생성자를 통해 출력되는 것이고 두번째줄은 기본생성자의 toString을 출력한 것입니다.

세번째줄은 정의된 생성자로 객체를 출력한 것입니다. 네번째줄과 다섯째줄은 자식클래스의 기본생성자가 생성되면서 출력되는 것입니다. 자식 클래스의 생성자가 실행되기 전에 부모클래스의 생성자가 먼저 실행된다는 것을 알 수 있습니다. 여섯째줄과 일곱째줄은 출력 형식이 달라진 것을 보아 오버라이드(재정의)된 toString메소드를 사용한 것임을 알 수 있습니다.

 

 

이처럼 상속과 메소드 오버라이드는 객체 지향 프로그래밍에 있어서 굉장히 중요한 개념입니다.

읽어주셔서 감사합니다.