본문으로 건너뛰기
Java 기초집LESSON 15

인터페이스와 다형성: 교체 가능한 기능 설계하기

난이도입문 → 초급
예상 시간35분
선수지식이전 강의

15강. 인터페이스와 다형성: 교체 가능한 기능 설계하기

1. 이번 강의에서 해결할 문제

GameRecord가 콘솔과 CSV 형식을 모두 직접 알면 출력 방식이 늘 때 도메인 클래스가 계속 바뀝니다. 필요한 동작을 별도 계약으로 분리해야 합니다.

2. 학습 목표

3. 핵심 개념

인터페이스는 구현 클래스가 제공해야 할 메서드 계약을 선언합니다. 다형성을 사용하면 RecordFormatter 참조에 ConsoleFormatter 또는 CsvFormatter를 넣어 호출 코드를 바꾸지 않고 전략을 교체할 수 있습니다.

4. 단계별 실습

1. src/FormatterDemo.java 작성

실행 환경: 코드 편집기

실행 위치: C:\dev\game-records

실행 전 확인: 같은 이름의 기존 파일이 있다면 덮어쓰기 전에 Git diff와 이번 강의 변경 범위를 확인합니다.

대상 파일: src/FormatterDemo.java

src/FormatterDemo.java
record GameRecord(String playerName, String mode, int score) {}

interface RecordFormatter {
String format(GameRecord record);
}

class ConsoleFormatter implements RecordFormatter {
public String format(GameRecord record) {
return record.playerName() + " - " + record.score() + "점 (" + record.mode() + ")";
}
}

class CsvFormatter implements RecordFormatter {
public String format(GameRecord record) {
return String.join(",", record.playerName(), record.mode(), String.valueOf(record.score()));
}
}

public class FormatterDemo {
static void print(GameRecord record, RecordFormatter formatter) {
System.out.println(formatter.format(record));
}
public static void main(String[] args) {
GameRecord record = new GameRecord("Alice", "ranked", 1400);
print(record, new ConsoleFormatter());
print(record, new CsvFormatter());
}
}

2. PowerShell에서 컴파일·실행

실행 환경: Windows PowerShell

실행 위치: C:\dev\game-records

실행 전 확인: java -versionjavac -version이 선택한 LTS JDK를 가리키고, 소스 파일명이 public 클래스명과 일치하는지 확인합니다.

대상: 이 강의의 .java 파일, out의 class 파일과 명시된 출력 파일

Windows PowerShell
Set-Location C:\dev\game-records
javac -d out .\src\FormatterDemo.java
java -cp out FormatterDemo

예상 결과: 같은 기록이 사람이 읽는 형식과 CSV 형식으로 각각 출력됩니다.

5. 코드가 동작하는 이유

print는 구체 클래스가 아니라 RecordFormatter 계약만 알며 실제 구현의 format이 호출됩니다. 이 예제의 record 문법은 간단한 불변 데이터 전달에 사용됩니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

인터페이스와 다형성: 교체 가능한 기능 설계하기 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“인터페이스와 다형성: 교체 가능한 기능 설계하기” 실행 결과를 설명하는 내용으로 가장 알맞은 것은 무엇인가요?
  2. 문제 2“인터페이스와 다형성: 교체 가능한 기능 설계하기”에서 ‘호출 코드에서 구현 타입을 instanceof로 분기하기’ 문제가 생겼습니다. 가장 알맞은 진단 또는 대응은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

15강. 인터페이스와 다형성: 교체 가능한 기능 설계하기 미완료 상태