상속과 오버라이딩: 공통 기능을 재사용하는 방법
14강. 상속과 오버라이딩: 공통 기능을 재사용하는 방법
1. 이번 강의에서 해결할 문제
코드 몇 줄을 재사용하려고 무조건 상속하면 하위 클래스가 필요 없는 부모 상태와 결합됩니다. 개념적 관계와 치환 가능성을 먼저 확인해야 합니다.
2. 학습 목표
3. 핵심 개념
하위 클래스는 상위 클래스의 공개 계약을 지켜 어디서든 대신 사용할 수 있어야 합니다. super(...)는 부모 생성자를 호출하고 @Override는 메서드 서명 실수를 컴파일러가 확인하게 합니다. 단순 기능 재사용은 필드로 다른 객체를 보유하는 조합이 더 유연할 수 있습니다.
4. 단계별 실습
1. src/InheritanceDemo.java 작성
실행 환경: 코드 편집기
실행 위치: C:\dev\game-records
실행 전 확인: 같은 이름의 기존 파일이 있다면 덮어쓰기 전에 Git diff와 이번 강의 변경 범위를 확인합니다.
대상 파일: src/InheritanceDemo.java
class GameRecord {
private final String playerName;
private final int score;
GameRecord(String playerName, int score) { this.playerName = playerName; this.score = score; }
String summary() { return playerName + " | " + score + "점"; }
int score() { return score; }
}
class RankedRecord extends GameRecord {
private final int rankChange;
RankedRecord(String playerName, int score, int rankChange) {
super(playerName, score);
this.rankChange = rankChange;
}
@Override String summary() { return super.summary() + " | 랭크 " + (rankChange >= 0 ? "+" : "") + rankChange; }
}
public class InheritanceDemo {
public static void main(String[] args) {
GameRecord record = new RankedRecord("Alice", 1400, 18);
System.out.println(record.summary());
}
}
2. PowerShell에서 컴파일·실행
실행 환경: Windows PowerShell
실행 위치: C:\dev\game-records
실행 전 확인: java -version과 javac -version이 선택한 LTS JDK를 가리키고, 소스 파일명이 public 클래스명과 일치하는지 확인합니다.
대상: 이 강의의 .java 파일, out의 class 파일과 명시된 출력 파일
Set-Location C:\dev\game-records
javac -d out .\src\InheritanceDemo.java
java -cp out InheritanceDemo
예상 결과: GameRecord 참조가 RankedRecord 객체의 오버라이드된 요약을 호출합니다.
5. 코드가 동작하는 이유
변수 타입은 GameRecord지만 실제 객체는 RankedRecord이므로 런타임 다형성으로 하위 구현이 호출됩니다. super.summary는 공통 표현을 재사용합니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
상속과 오버라이딩: 공통 기능을 재사용하는 방법 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.