홈 › 중급 › 01 / 9

상속, 다형성, 오버라이딩

섹션 7진행 0 / 9

상속과 다형성

상속(extends)으로 공통 코드를 재사용하고, 오버라이딩과 다형성으로 "같은 호출, 다른 동작"을 구현할 수 있다. 이 레슨을 끝내면 상속 구조를 직접 설계하고, 언제 상속 대신 컴포지션을 써야 하는지 판단할 수 있다.

1. 왜 배우는가

실무 코드베이스를 열어 보면 extends와 @Override가 없는 파일을 찾기가 더 어렵다. Spring의 JpaRepository를 상속받아 리포지토리를 만들고, RuntimeException을 상속받아 비즈니스 예외를 정의하고, HttpServlet을 상속받아 요청을 처리한다.

프레임워크가 제공하는 뼈대에 내 코드를 끼워 넣는 방식이 대부분 상속과 오버라이딩으로 이루어진다. 상속의 동작 원리를 모르면 "왜 부모 생성자가 먼저 실행되는지", "왜 오버라이딩한 메서드가 부모 타입 변수로 호출해도 자식 것이 실행되는지"를 설명할 수 없고, 결국 프레임워크를 "주술적으로" 사용하게 된다.

다형성(polymorphism, 하나의 타입으로 여러 구현을 다루는 성질)은 확장 가능한 설계의 핵심이다. 결제 수단이 카드/계좌이체/포인트로 늘어나도 Payment 타입 하나로 처리하는 코드가 바뀌지 않게 만드는 것, 알림 채널이 이메일/SMS/카카오톡으로 늘어나도 Notifier 타입 하나만 바라보는 것. 이것이 다형성이 실무에서 하는 일이다.

반대로 상속을 잘못 쓰면 코드가 아주 빠르게 망가진다. "코드 재사용하려고 상속했더니 부모를 고칠 때마다 자식 10개가 깨진다"는 문제는 거의 모든 레거시 프로젝트에 존재한다. 이 레슨에서는 상속의 원리뿐 아니라 상속을 쓰지 말아야 할 때를 판단하는 기준까지 다룬다.