package CHAPTER05;

class GameCharacter {

 // 1. 접근 제어자 적용 (캡슐화)
 private String name;      
 private int level;        
 private int health;       
 protected String type;    

 // 2. 생성자 오버로딩
 public GameCharacter() {
     this("Unknown", 1, 100, "기본형");
 }

 public GameCharacter(String name) {
     this(name, 1, 100, "기본형");
 }

 public GameCharacter(String name, int level) {
     this(name, level, 100, "기본형");
 }

 public GameCharacter(String name, int level, int health, String type) {
     this.name = name;
     this.level = level;
     this.health = health;
     this.type = type;
 }

 // 3. 캡슐화 (Getter & Setter)
 public String getName() {
     return name;
 }

 public int getLevel() {
     return level;
 }

 public int getHealth() {
     return health;
 }

 public String getType() {
     return type;
 }

 public void setHealth(int health) {
     if (health >= 0) {
         this.health = health;
     } else {
         System.out.println("체력은 0 이상이어야 합니다.");
     }
 }

 // 캐릭터 정보 출력
 public void displayInfo() {
     System.out.println("이름: " + name + ", 레벨: " + level + ", 체력: " + health + ", 유형: " + type);
 }
}

//메인 클래스 (실행)
public class LAB02_GameCharacter {
 public static void main(String[] args) {
     // 1. 생성자 오버로딩을 활용한 캐릭터 생성
     GameCharacter character1 = new GameCharacter();
     GameCharacter character2 = new GameCharacter("엘프");
     GameCharacter character3 = new GameCharacter("드래곤", 50, 1000, "보스");

     // 2. 캐릭터 정보 출력
     character1.displayInfo();
     character2.displayInfo();
     character3.displayInfo();

     // 3. 캡슐화 적용된 필드 수정 (Setter 사용)
     System.out.println("\n드래곤의 체력을 800으로 변경...");
     character3.setHealth(800);
     character3.displayInfo();
 }
}