λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Java

[Java] μ™œ `this()` μƒμ„±μž 체이닝을 μ‚¬μš©ν•˜λŠ”κ°€?

by clolee 2025. 4. 8.

🧩 μ™œ this() μƒμ„±μž 체이닝을 μ‚¬μš©ν•˜λŠ”κ°€?


βœ… ν•œ 쀄 μš”μ•½

μœ μ—°ν•œ 객체 생성 + μ½”λ“œ 쀑볡 제거 + μœ μ§€λ³΄μˆ˜ νŽΈμ˜μ„±

이 μ„Έ κ°€μ§€λ₯Ό μœ„ν•΄ 이런 방식듀을 μ”λ‹ˆλ‹€.


🧩 μ™œ this() μƒμ„±μž 체이닝을 μ‚¬μš©ν•˜λŠ”κ°€?

1️⃣ μ½”λ“œ 쀑볡 제거

class Student {
    String name;
    int score;

    public Student() {
        this.name = "이름 μ—†μŒ";
        this.score = 0;
    }

    public Student(String name) {
        this.name = name;
        this.score = 0;
    }

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }
}

➑️ this.name = name;, this.score = 0; 같은 쀑볡 μ½”λ“œκ°€ 반볡됨

βœ… 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 곡톡 λ‘œμ§μ„ ν•˜λ‚˜μ˜ μƒμ„±μžλ‘œ λͺ°κ³ , λ‚˜λ¨Έμ§€λŠ” this()둜 ν˜ΈμΆœν•©λ‹ˆλ‹€.

class Student {
    String name;
    int score;

    public Student() {
        this("이름 μ—†μŒ", 0);
    }

    public Student(String name) {
        this(name, 0);
    }

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }
}

➑️ 쀑볡 제거 + μœ μ§€λ³΄μˆ˜ κ°„νŽΈ


2️⃣ λ‹€μ–‘ν•œ μ΄ˆκΈ°ν™” 방식 제곡 (μœ μ—°μ„±)

  • μ‚¬μš©μžλŠ” new Student()도, new Student("홍길동")도, new Student("홍길동", 100)도 μ“Έ 수 있음
  • κ°œλ°œμžκ°€ λ§€κ°œλ³€μˆ˜ 쑰합에 따라 객체 생성 방법을 λ‹€μ–‘ν•˜κ²Œ 선택할 수 있게 λ„μ™€μ€Œ

βœ… μ‹€λ¬΄μ—μ„œλŠ” "κΈ°λ³Έκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λœ 객체", "λΆ€λΆ„λ§Œ μ„€μ •λœ 객체", "λͺ¨λ“  κ°’ μ§€μ •λœ 객체" λ“± λ‹€μ–‘ν•œ 상황이 쑴재

 


3️⃣ 기본값을 μ•ˆμ „ν•˜κ²Œ μ„€μ •ν•  수 있음

new Student();               // "이름 μ—†μŒ", 0
new Student("홍길동");        // "홍길동", 0
new Student("홍길동", 90);    // "홍길동", 90

➑️ μƒμ„±μž 체이닝을 μ‚¬μš©ν•˜λ©΄,

"μž…λ ₯ μ•ˆ 받은 ν•­λͺ©μ€ κΈ°λ³Έκ°’μœΌλ‘œ μžλ™ μ„€μ •" κ°€λŠ₯

→ 객체 생성 μ‹œ μ‹€μˆ˜ 쀄이고 μ•ˆμ •μ„± ↑


🧠 μ–Έμ œ μ‹€λ¬΄μ—μ„œ 이런 ꡬ쑰가 μœ μš©ν• κΉŒ?

상황 효과
JSON νŒŒμ‹± ν›„ 객체 생성 μ‹œ ν•„λ“œκ°€ λˆ„λ½λ  수 있음 → κΈ°λ³Έκ°’ ν•„μš”
ν…ŒμŠ€νŠΈ μ‹œ κ°„λ‹¨ν•œ 객체 생성이 ν•„μš”ν•¨ (new User()둜 μ΅œμ†Œ 생성 κ°€λŠ₯)
μ‚¬μš©μž μž…λ ₯이 λ‹€μ–‘ν•  λ•Œ μœ μ—°ν•œ μƒμ„±μž μ˜€λ²„λ‘œλ”© ν•„μš”
라이브러리/ν”„λ ˆμž„μ›Œν¬ μ‚¬μš© μ‹œ κΈ°λ³Έ μƒμ„±μž ν•„μˆ˜ (Spring, JPA, Jackson λ“±)

βœ… 정리

이유 μ„€λͺ…
μ½”λ“œ 쀑볡 제거 같은 μ΄ˆκΈ°ν™” μ½”λ“œκ°€ μ—¬λŸ¬ μƒμ„±μžμ— νΌμ§€λŠ” 것 λ°©μ§€
μœ μ—°ν•œ μ΄ˆκΈ°ν™” μƒν™©λ³„λ‘œ λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ 객체 생성 κ°€λŠ₯
κΈ°λ³Έκ°’ 보μž₯ 일뢀 μ •λ³΄λ§Œ μ œκ³΅λ˜μ—ˆμ„ λ•Œλ„ μ•ˆμ „ν•˜κ²Œ 생성 κ°€λŠ₯
μœ μ§€λ³΄μˆ˜ 용이 μƒμ„±μž ν•˜λ‚˜λ§Œ 고치면 전체 둜직 반영됨

πŸ”š ν•œ 쀄 μš”μ•½ 정리

this()와 μƒμ„±μž μ˜€λ²„λ‘œλ”©μ€

객체λ₯Ό 더 μœ μ—°ν•˜κ³  μ•ˆμ „ν•˜κ²Œ μƒμ„±ν•˜κ³ ,

μ½”λ“œ 쀑볡을 쀄이고, μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ λ§Œλ“€κΈ° μœ„ν•œ κ°•λ ₯ν•œ λ„κ΅¬μž…λ‹ˆλ‹€.


λŒ“κΈ€