class Doctor {
void doctorDetails() {
System.out.println("Doctor Details...");
}
}
class Surgeon extends Doctor {
void surgeonDetails() {
System.out.println("Surgeon Detail...");
}
}
public class Hospital {
public static void main(String[] args) {
Surgeon s = new Surgeon();
s.doctorDetails();
s.surgeonDetails();
}
}
super 키워드 사용
super 키워드는 슈퍼클래스 멤버에 접근하게 해주며, this와 유사하지만 부모 클래스 요소에 사용됩니다.
변수, 메서드, 생성자에 모두 사용 가능합니다.
문법 예:
super.methodName();
실전 시나리오: 뱅킹 애플리케이션
여러 계좌 유형을 지원하는 뱅킹 애플리케이션을 고려해 보세요. 구조적 접근에서는 deposit, withdraw 같은 공통 동작에 대해 별도 함수를 작성합니다.
OOP 접근에서는 공통 동작을 담은 기본 Account 클래스를 정의하고, 특정 계좌 유형에 맞게 확장합니다.
구조적 접근: deposit/withdraw 별도 함수OOP 접근: 서브클래싱으로 중복 감소
오버드래프트 기능 추가
오버드래프트 기능 요구사항이 생기면, 구조적 코드는 기존 함수를 수정해야 합니다. 반면 OOP에서는 테스트된 기본 코드를 건드리지 않고 독자적인 withdraw 로직을 가진 새 서브클래스를 만들면 됩니다.
구조적 접근: 기존 withdraw 함수 수정OOP 접근: 오버드래프트 계좌용 새 서브클래스 추가
신용카드 계좌 추가
마찬가지로 고유한 입금 규칙을 가진 신용카드 계좌 도입도 OOP에서는 기본 클래스를 확장한 특화 서브클래스 생성으로 간단히 해결됩니다.
구조적 접근: 기존 입금 로직 수정OOP 접근: 커스텀 입금 로직을 가진 새 서브클래스 생성
OOP에서 상속의 이점
상속은 공통 로직을 부모 클래스에 두어 코드 중복을 제거합니다. 자식 클래스는 deposit과 withdraw 메서드를 상속받아 유지보수 부담을 줄입니다.