[Java] 상속과 오버라이딩

차윤하·2023년 10월 13일
2

상속

상속은 우리가 알고 있는 것처럼 자식이 부모의 것을 그대로 물려받는다는 의미가 자바에서 그대로 적용된다. A 클래스가 B 클래스를 상속받았다고 한다면, 이 때 상속한 B 클래스를 부모 클래스, 상속 받은 A 클래스를 자식 클래스로 역할을 나눌 수 있다.

상속은 extends 키워드를 사용하여 다음과 같이 표현한다.

public class A extends B{
 ...
}

그러면 B 클래스는 A 클래스(부모)가 가지고 있는 멤버들을 모두 자기 것처럼 사용할 수 있게 된다. 단, 부모가 제외한 것 빼고 사용할 수 있다. (접근 제한자 private, 생성자)

그리고 자바는 단일 상속만을 지원하고 있어 클래스 하나만 부모클래스로 상속받을 수 있다. 다중 상속이 되지 않는다.



상속 관계를 가질 수 있는 조건은?

Is-A 관계여야 한다. ‘~는 ~이다’가 되어야 한다.

제품 클래스컴퓨터 클래스가 있다고 하자.
‘컴퓨터는 제품이다’ 맞는 말이며 Is-A 관계이다. 따라서 컴퓨터는 제품 클래스를 상속받을 수 있다. 반대로 ‘제품은 컴퓨터이다’는 말이 되지 않는다. Is-A 관계가 성립하지 않기 때문에 상속 관계가 될 수 없다.


오버라이딩(Overriding)

상속은 부모의 것을 물려받는다는 개념 보다는 부모 클래스의 확장(extends) 개념을 가진다. 물려받은 것을 자기 것처럼 사용하는 것 뿐만 아니라 자식 클래스의 고유 멤버나 메소드를 작성할 수 있다.

특히 부모가 가진 메소드를 커스터마이징할 수도 있는데, 이를 부모 메소드를 자식 클래스에서 재정의한다고 표현하고 오버라이딩 했다고 한다.

부모가 가지는 메소드 선언부를 그대로 사용하면서, 자식 클래스에서 정의한 메소드대로 동작하도록 구현 몸체 부분을 새롭게 다시 작성, 다시 정의하는 기술이다.(메소드 재정의)

이렇게 메소드 재정의를 하면 메소드를 호출할 시 자식클래스에서 재정의한 메소드가 우선적으로 동작하게 된다.

// override 코드

override 코드

상속을 하는 이유

새로운 클래스를 작성할 때 기존에 작성한 클래스를 재사용하기 위함이다. 코드가 반복적으로 사용될 경우 재사용하면 생산성을 크게 향상시킬 수 있다. 또 공통적으로 사용되는 코드가 부모 클래스에 존재하면 수정 사항이 생길 시 부모 클래스만 수정해도 전체적으로 적용된다.

또한, 다형성을 적용하기 위함이다. 다형성은 간단히 말하면 하나의 객체가 여러 가지 타입을 가질 수 있게 한 것이다. 상속을 하면 자식 클래스의 타입은 자기 자신과 부모 2가지 타입을 가지게 된다.

profile
풀스택 개발자가 되고 싶은 꿈나무

0개의 댓글