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

추상 클래스와 인터페이스를 언제 선택할까?

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

16강. 추상 클래스와 인터페이스를 언제 선택할까?

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

추상 클래스와 인터페이스를 문법 차이로만 외우면 불필요한 계층을 만듭니다. 공유 상태와 교체 가능한 역할 중 무엇이 필요한지 판단해야 합니다.

2. 학습 목표

3. 핵심 개념

추상 클래스는 밀접한 하위 타입이 공통 상태와 일부 구현을 공유할 때 적합합니다. 인터페이스는 서로 다른 클래스가 같은 능력을 제공할 때 적합하고 한 클래스가 여러 인터페이스를 구현할 수 있습니다. 상태를 가진 서비스 객체를 필드로 조합하는 방식도 항상 비교합니다.

4. 단계별 실습

1. src/AbstractionDemo.java 작성

실행 환경: 코드 편집기

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

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

대상 파일: src/AbstractionDemo.java

src/AbstractionDemo.java
interface Validatable {
boolean isValid();
}

abstract class RecordExporter {
final void export(String content) {
if (content == null || content.isBlank()) throw new IllegalArgumentException("내용이 비었습니다.");
System.out.println(header());
System.out.println(content);
}
protected abstract String header();
}

class ConsoleExporter extends RecordExporter {
@Override protected String header() { return "=== 게임 기록 ==="; }
}

public class AbstractionDemo implements Validatable {
public boolean isValid() { return true; }
public static void main(String[] args) {
AbstractionDemo app = new AbstractionDemo();
if (app.isValid()) new ConsoleExporter().export("Alice | 1400점");
}
}

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\AbstractionDemo.java
java -cp out AbstractionDemo

예상 결과: 검증 계약을 통과한 뒤 추상 클래스의 공통 export 흐름과 하위 헤더가 함께 출력됩니다.

5. 코드가 동작하는 이유

final export는 검증·출력 순서를 고정하고 추상 header만 하위 클래스가 결정하게 하는 템플릿 메서드입니다. Validatable은 상태 공유 없이 검증 능력만 요구합니다.

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

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

추상 클래스와 인터페이스를 언제 선택할까? 미니 퀴즈

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

0 / 2
  1. 문제 1“추상 클래스와 인터페이스를 언제 선택할까?” 실습을 안전하게 진행하기 위한 판단으로 가장 알맞은 것은 무엇인가요?
  2. 문제 2“추상 클래스와 인터페이스를 언제 선택할까?”의 작업 기준으로 ‘깊은 상속 계층 만들기’을 진단하거나 바로잡은 선택은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

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

16강. 추상 클래스와 인터페이스를 언제 선택할까? 미완료 상태