9️⃣ 생성자 – 객체 탄생의 순간을 다루는 마법! 🎩✨

🎬 상상해봐

너는 "드래곤" 객체를 만들고 싶어.
드래곤은 이름체력이 있어야 해.

이전에는 이렇게 수동으로 정보를 넣었지?

java
복사편집
Dragon dragon1 = new Dragon(); dragon1.name = "불사조"; dragon1.hp = 500;

그런데 이걸 자동으로 처리하려면 어떻게 해야 할까?
바로 생성자가 등장한다!


🧙‍♂️ 1. 생성자란?

생성자는 객체가 생성될 때 자동으로 호출되는 특수한 메서드야.
객체가 만들어지는 순간, 초기값을 자동으로 설정해줄 수 있어!

public class Dragon {

    String name;
    int hp; // 생성자
    
    public Dragon(String n, int h) {
		name = n;
        hp = h;
    }
}

🔑 생성자클래스 이름과 똑같아야 해!

  • Dragon(String n, int h) → 이 생성자는 이름과 체력을 자동으로 초기화해줌!

🏗️ 2. 생성자를 이용한 객체 만들기

public class Main {

    public static void main(String[] args) {

        // 생성자를 통해 바로 초기값을 설정
        Dragon dragon1 = new Dragon("불사조", 500);
        System.out.println(dragon1.name + "의 체력: " + dragon1.hp); // 불사조의 체력: 500
    }
}

생성자 덕분에 이제 객체를 만들 때, 한 번에 값이 들어가!


🧩 3. 생성자 여러 개 만들기 (오버로딩)

생성자는 하나만 만들 수 있는 게 아니야!
같은 이름의 생성자를 여러 개 만들 수 있는데,
그걸 생성자 오버로딩이라고 해.

public class Dragon {

    String name;
    int hp;
    
    // 첫 번째 생성자
    public Dragon(String n) {
        name = n;
        hp = 100; // 기본 체력
    }
    
    // 두 번째 생성자
    public Dragon(String n, int h) {
        name = n;
        hp = h;
    }
}

생성자 오버로딩을 이용하면, 다양한 방법으로 객체를 초기화할 수 있어!

Dragon dragon1 = new Dragon("불사조", 500); // 이름과 체력
Dragon dragon2 = new Dragon("용", 300); // 이름과 체력
Dragon dragon3 = new Dragon("불사조"); // 기본 체력 100

💡 4. 생성자와 this

this는 객체 자신을 가리키는 키워드야.
자기 자신을 가리켜서 같은 이름의 변수와 구분할 때 쓰는 거지.

public class Dragon {

    String name;
    int hp;
    
    // 생성자
    public Dragon(String name, int hp) {
        this.name = name; // this로 구분
        this.hp = hp;
    }
}

this.name은 현재 객체의 name을 의미하고,
매개변수로 들어온 name은 지역 변수니까 구분이 필요해!


🧠 정리 타임

개념의미예시
생성자 객체가 생성될 때 자동으로 호출되는 메서드 public Dragon(String name, int hp)
오버로딩 같은 이름의 생성자를 여러 개 만들기 public Dragon(String name) / public Dragon(String name, int hp)
this 객체 자신을 가리키는 키워드 this.name = name;

🎮 실전 미션 – 캐릭터 생성

public class Hero {

    String name;
    int level;

    // 생성자
    public Hero(String n, int l) {
        name = n;
        level = l;
    }

    void attack() {
        System.out.println(name + "이(가) 공격했다!");
    }
}
public class Main {

    public static void main(String[] args) {
        Hero hero1 = new Hero("철수", 10);
        Hero hero2 = new Hero("영희", 8);
        
        hero1.attack(); // 철수가 공격했다!
        hero2.attack(); // 영희가 공격했다!
    }
}

✨ 마무리 요약

생성자는 객체가 탄생할 때 자동으로 초기화해주는 마법의 주문이야.
이제 객체가 만들어지는 순간부터 필요한 정보를 자유롭게 넣을 수 있게 되었어!


다음 10단원에서는 상속을 배워볼 거야.
이건 마치 기존 캐릭터를 확장하거나, 새로운 능력을 추가하는 기술이야.
기초부터 조금씩 확장되는 걸 배우면서 점점 더 강력한 캐릭터를 만들 수 있어!