온라인 스트리밍 서비스 관리 시스템
📋 문제 설명
3단계 상속 구조를 가진 클래스들을 구현하여 온라인 스트리밍 서비스를 모델링하세요.
Content → Video → Movie의 다단계 상속과 메소드 체이닝을 학습합니다.
🎯 클래스 계층 구조
Java
Content (최상위 클래스)
↓
Video (Content를 상속)
↓
Movie (Video를 상속)
💻 코드 구조
Content 클래스 (최상위 부모 클래스)
Java
public class Content {
protected String title; // 제목
protected int duration; // 재생 시간 (분 단위)
public Content(String title, int duration) {
// title과 duration을 초기화
}
public void play() {
// "[title]을 재생합니다. 재생 시간: [duration]분" 메시지 출력
}
public void displayInfo() {
// 제목과 재생 시간 정보 출력
// 예: "제목: [title], 재생 시간: [duration]분"
}
}
필드
protected String title- 콘텐츠 제목protected int duration- 재생 시간 (분)
Video 클래스 (Content를 상속)
Java
public class Video extends Content {
protected String resolution; // 해상도: "720p", "1080p", "4K"
public Video(String title, int duration, String resolution) {
// 1. 부모 클래스의 생성자 호출: super(title, duration)
// 2. resolution 초기화
}
@Override
public void play() {
// 1. 부모 클래스의 play() 메서드 호출: super.play()
// 2. "[resolution] 해상도로 재생합니다." 메시지 추가 출력
}
@Override
public void displayInfo() {
// 1. 부모 클래스의 displayInfo() 메서드 호출
// 2. 해상도 정보 추가 출력
// 예: "해상도: [resolution]"
}
public void adjustResolution(String newResolution) {
// resolution을 newResolution으로 변경
// "해상도가 [newResolution]로 변경되었습니다." 메시지 출력
}
}
추가 필드
protected String resolution- 영상 해상도
추가 메서드
adjustResolution()- 해상도 변경
Movie 클래스 (Video를 상속)
Java
public class Movie extends Video {
private String director; // 감독 이름
private int releaseYear; // 개봉 년도
public Movie(String title, int duration, String resolution,
String director, int releaseYear) {
// 1. 부모 클래스의 생성자 호출: super(title, duration, resolution)
// 2. director와 releaseYear 초기화
}
@Override
public void play() {
// 1. 부모 클래스의 play() 메서드 호출: super.play()
// 2. "감독: [director], 개봉년도: [releaseYear]" 메시지 추가 출력
}
@Override
public void displayInfo() {
// 1. 부모 클래스의 displayInfo() 메서드 호출
// 2. 감독과 개봉년도 정보 추가 출력
// 예: "감독: [director], 개봉년도: [releaseYear]"
}
public void displayCast() {
// "영화 [title]의 출연진 정보입니다." 메시지 출력
// (실제 출연진 정보는 구현하지 않음)
}
public void fullDisplay() {
// 모든 정보를 순차적으로 출력하는 메서드
System.out.println("=== 영화 전체 정보 ===");
// 1. displayInfo() 메서드 호출
// 2. play() 메서드 호출
// 3. displayCast() 메서드 호출
// 4. adjustResolution() 메서드를 호출하여 해상도를 "4K"로 변경
}
}
추가 필드
private String director- 감독 이름private int releaseYear- 개봉 년도
추가 메서드
displayCast()- 출연진 정보 표시fullDisplay()- 모든 메서드를 체이닝하여 전체 정보 출력
📝 Main 클래스 테스트
Java
public class Main {
public static void main(String[] args) {
// Movie 객체 생성
Movie movie = new Movie(
"인터스텔라", // 제목
169, // 재생시간 (분)
"1080p", // 해상도
"크리스토퍼 놀란", // 감독
2014 // 개봉년도
);
// fullDisplay() 메서드 호출하여 모든 기능 테스트
movie.fullDisplay();
}
}
예상 출력:
Java
=== 영화 전체 정보 ===
제목: 인터스텔라, 재생 시간: 169분
해상도: 1080p
감독: 크리스토퍼 놀란, 개봉년도: 2014
인터스텔라을 재생합니다. 재생 시간: 169분
1080p 해상도로 재생합니다.
감독: 크리스토퍼 놀란, 개봉년도: 2014
영화 인터스텔라의 출연진 정보입니다.
해상도가 4K로 변경되었습니다.
💡 학습 포인트
1. 다단계 상속 (Multi-level Inheritance)
- Content → Video → Movie의 3단계 구조
- 각 단계에서 기능이 점진적으로 확장됨
2. super 키워드의 활용
- 생성자 체이닝: 각 클래스가 부모 생성자를 순차적으로 호출
- 메서드 체이닝: 부모의 메서드를 호출한 후 추가 기능 구현
3. 메서드 오버라이딩의 누적
displayInfo()와play()가 각 단계에서 오버라이드- 정보가 계층을 따라 점점 풍부해짐
4. protected 접근 제어자
- 손자 클래스(Movie)도 할아버지 클래스(Content)의 protected 필드에 접근 가능