사용자 관리 시스템
📋 문제 설명
User 부모 클래스를 상속받는 Customer와 Admin 클래스를 구현하세요.
상속의 기본 개념과 메소드 오버라이딩을 학습합니다.
🎯 클래스 계층 구조
Java
User (부모 클래스)
├── Customer (자식 클래스)
└── Admin (자식 클래스)
💻 코드 구조
User 클래스 (부모 클래스)
Java
public class User {
protected String username;
protected String email;
public User(String username, String email) {
// username과 email을 초기화
}
public void displayInfo() {
// username과 email을 출력
// 예: "사용자: [username], 이메일: [email]"
}
}
필드
protected String username- 사용자 이름protected String email- 이메일 주소
⚠️ protected 키워드: 자식 클래스에서 접근 가능하도록 설정
Customer 클래스 (자식 클래스)
Java
public class Customer extends User {
private int loyaltyPoints;
public Customer(String username, String email) {
// 1. 부모 클래스의 생성자 호출 (super 사용)
// 2. loyaltyPoints를 0으로 초기화
}
@Override
public void displayInfo() {
// 1. 부모 클래스의 displayInfo() 메서드 호출 (super 사용)
// 2. loyaltyPoints 정보 추가 출력
// 예: "적립 포인트: [loyaltyPoints]"
}
public void addPoints(int points) {
// loyaltyPoints에 points를 더함
// "포인트 [points]점이 적립되었습니다" 메시지 출력
}
}
추가 필드
private int loyaltyPoints- 적립 포인트 (초기값: 0)
추가 메서드
addPoints(int points)- 포인트 적립
Admin 클래스 (자식 클래스)
Java
public class Admin extends User {
private String role;
public Admin(String username, String email, String role) {
// 1. 부모 클래스의 생성자 호출 (super 사용)
// 2. role 초기화
}
@Override
public void displayInfo() {
// 1. 부모 클래스의 displayInfo() 메서드 호출 (super 사용)
// 2. role 정보 추가 출력
// 예: "역할: [role]"
}
public void manageService() {
// "관리자 [username]이(가) [role] 서비스를 관리합니다." 메시지 출력
}
}
추가 필드
private String role- 관리자 역할 (예: "시스템 관리", "컨텐츠 관리")
추가 메서드
manageService()- 서비스 관리 기능
📝 Main 클래스 테스트
Java
public class Main {
public static void main(String[] args) {
// Customer 객체 생성
Customer customer = new Customer("김철수", "chulsoo@example.com");
// Customer 정보 출력
customer.displayInfo();
// 포인트 적립
customer.addPoints(1000);
// 적립 후 다시 정보 출력 (포인트 증가 확인)
customer.displayInfo();
System.out.println(); // 빈 줄
// Admin 객체 생성
Admin admin = new Admin("박관리", "admin@example.com", "시스템 관리");
// Admin 정보 출력
admin.displayInfo();
// 서비스 관리 실행
admin.manageService();
}
}
💡 학습 포인트
1. 상속 (Inheritance)
extends키워드로 부모 클래스 상속- 부모의 필드와 메서드를 자식이 물려받음
2. super 키워드
- 생성자에서:
super()로 부모 생성자 호출 - 메서드에서:
super.메서드명()으로 부모 메서드 호출
3. 메서드 오버라이딩 (Method Overriding)
@Override어노테이션 사용- 부모의 메서드를 자식에서 재정의
- 부모 메서드 기능을 유지하면서 추가 기능 구현
4. protected 접근 제어자
- 같은 패키지 + 상속받은 자식 클래스에서 접근 가능