λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

이클립슀(Eclipse) Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor μ—λŸ¬ ν•΄κ²°

by 5566 2023. 8. 18.

1. 이클립슀(Eclipse) Implicit super constructor Object() is undefined for default constructor μ—λŸ¬λž€?

μ΄ν΄λ¦½μŠ€μ—μ„œ Implicit super constructor Object() is undefined for default constructor μ—λŸ¬λŠ” λ””ν΄νŠΈ μƒμ„±μž(default constructor)에 λŒ€ν•œ 암묡적인(super) μƒμ„±μž Object()의 μ •μ˜κ°€ 없을 λ•Œ λ°œμƒν•˜λŠ” 였λ₯˜μž…λ‹ˆλ‹€.

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 언어인 μžλ°”λŠ” 클래슀λ₯Ό μ •μ˜ν•  λ•Œ, ν•΄λ‹Ή 클래슀의 μƒμ„±μž(Constructor)λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μƒμ„±μžλŠ” 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” 역할을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€. λ§Œμ•½ μ–΄λ–€ ν΄λž˜μŠ€μ— μƒμ„±μžκ°€ λͺ…μ‹œμ μœΌλ‘œ μ •μ˜λ˜μ§€ μ•Šμ•˜λ‹€λ©΄, μ»΄νŒŒμΌλŸ¬λŠ” 이λ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•΄μ£ΌλŠ”λ°, 이λ₯Ό λ””ν΄νŠΈ μƒμ„±μžλΌκ³  ν•©λ‹ˆλ‹€.

그런데, μ΄ν΄λ¦½μŠ€μ—μ„œ μœ„μ˜ μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” μ΄μœ λŠ” ν΄λž˜μŠ€κ°€ μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ, μžλ™μœΌλ‘œ μƒμ„±λ˜λŠ” λ””ν΄νŠΈ μƒμ„±μžκ°€ super() ν‚€μ›Œλ“œλ₯Ό 톡해 λΆ€λͺ¨ 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ”λ°, Object 클래슀의 μƒμ„±μžλ₯Ό 찾을 수 μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. Object ν΄λž˜μŠ€λŠ” λͺ¨λ“  클래슀의 κΈ°λ³Έ λΆ€λͺ¨ ν΄λž˜μŠ€λ‘œμ„œ, λͺ¨λ“  ν΄λž˜μŠ€λŠ” μ•”λ¬΅μ μœΌλ‘œ Object 클래슀λ₯Ό μƒμ†λ°›μŠ΅λ‹ˆλ‹€.

이 μ—λŸ¬λŠ” Object 클래슀의 μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” 방법이 μ—†κΈ° λ•Œλ¬Έμ— λ°œμƒν•©λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” λͺ…μ‹œμ μΈ μƒμ„±μžλ₯Ό μ •μ˜ν•˜κ±°λ‚˜, 상속을 톡해 Object 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” 방법을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄ν΄λ¦½μŠ€λŠ” μƒμ„±μžκ°€ μ—†λŠ” ν΄λž˜μŠ€μ— λŒ€ν•΄ μžλ™μœΌλ‘œ λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μƒμ„±ν•΄μ£Όμ§€λ§Œ, λͺ…μ‹œμ μΈ μƒμ„±μžκ°€ μ •μ˜λ˜λ©΄ λ””ν΄νŠΈ μƒμ„±μžλŠ” μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이 μ—λŸ¬λŠ” 주둜 상속을 톡해 클래슀λ₯Ό κ΅¬ν˜„ν•  λ•Œ λ°œμƒν•˜λŠ”λ°, λΆ€λͺ¨ ν΄λž˜μŠ€μ— λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•œ μƒμ„±μžκ°€ μžˆλŠ” κ²½μš°μ—λŠ” λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

2. 이 μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” 이유

이 μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” μ΄μœ λŠ” μžλ°”μ˜ ν΄λž˜μŠ€κ°€ Object 클래슀λ₯Ό μƒμ†λ°›λŠ” λ””ν΄νŠΈ 상속 ꡬ쑰 λ•Œλ¬Έμž…λ‹ˆλ‹€. Object ν΄λž˜μŠ€λŠ” λͺ¨λ“  클래슀의 μ΅œμƒμœ„ λΆ€λͺ¨ 클래슀이며, μžλ™μœΌλ‘œ λͺ¨λ“  ν΄λž˜μŠ€κ°€ Object 클래슀λ₯Ό μƒμ†λ°›μŠ΅λ‹ˆλ‹€.

μžλ°”μ—μ„œ 클래슀λ₯Ό μ •μ˜ν•  λ•Œ, μƒμ„±μž(Constructor)λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄, μ»΄νŒŒμΌλŸ¬λŠ” 기본적으둜 λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€. λ””ν΄νŠΈ μƒμ„±μžλŠ” λ§€κ°œλ³€μˆ˜λ₯Ό 가지지 μ•ŠλŠ” μƒμ„±μžλ‘œμ„œ, 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

μ΄ν΄λ¦½μŠ€μ—μ„œ λ°œμƒν•˜λŠ” 이 μ—λŸ¬λŠ” ν΄λž˜μŠ€κ°€ μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ, μžλ™μœΌλ‘œ μƒμ„±λ˜λŠ” λ””ν΄νŠΈ μƒμ„±μžκ°€ super() ν‚€μ›Œλ“œλ₯Ό 톡해 λΆ€λͺ¨ 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ”λ°, 이 λ•Œ λΆ€λͺ¨ 클래슀인 Object 클래슀의 μƒμ„±μžλ₯Ό 찾을 수 μ—†κΈ° λ•Œλ¬Έμ— λ°œμƒν•©λ‹ˆλ‹€. Object ν΄λž˜μŠ€λŠ” λ§€κ°œλ³€μˆ˜λ₯Ό 가지지 μ•ŠλŠ” λ””ν΄νŠΈ μƒμ„±μžλ₯Ό 가지고 μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 이유둜, ν΄λž˜μŠ€μ—μ„œ μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ, Object 클래슀의 μƒμ„±μž ν˜ΈμΆœμ„ μœ„ν•œ super() ν‚€μ›Œλ“œκ°€ μžλ™μœΌλ‘œ μƒμ„±λ˜λŠ” κ²½μš°μ— λ°œμƒν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 μ—λŸ¬λŠ” 주둜 상속을 톡해 클래슀λ₯Ό μ •μ˜ν•  λ•Œ λ°œμƒν•˜λ©°, Object 클래슀의 μƒμ„±μž ν˜ΈμΆœμ„ ν•΄κ²°ν•˜μ§€ μ•Šμ€ μƒνƒœμ—μ„œ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λ €κ³  ν•  λ•Œ μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.

3. 이 μ—λŸ¬λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 방법듀

이 μ—λŸ¬λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 방법듀을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

3.1 λͺ…μ‹œμ μœΌλ‘œ μƒμ„±μžλ₯Ό μ •μ˜ν•˜κΈ°

κ°€μž₯ κ°„λ‹¨ν•˜κ³  일반적인 방법은 ν΄λž˜μŠ€μ— μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μƒμ„±μžλ₯Ό μ •μ˜ν•¨μœΌλ‘œμ¨ λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, λͺ…μ‹œμ μœΌλ‘œ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 κ²½μš°μ—λŠ” Object 클래슀의 μƒμ„±μž 호좜과 κ΄€λ ¨λœ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

public class MyClass {
    public MyClass() {
        // μƒμ„±μž λ‚΄μš© μž‘μ„±
    }
}

3.2 super ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ Object 클래슀의 μƒμ„±μž ν˜ΈμΆœν•˜κΈ°

λͺ…μ‹œμ μœΌλ‘œ μƒμ„±μžλ₯Ό μ •μ˜ν•˜μ§€ μ•Šμ„ 경우, λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ”λ°, 이 λ•Œ super() ν‚€μ›Œλ“œλ₯Ό 톡해 Object 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. μ΄λ•Œ Object 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•΄μ„œλŠ” Object 클래슀λ₯Ό λͺ…μ‹œμ μœΌλ‘œ 상속받아야 ν•©λ‹ˆλ‹€.

public class MyClass extends Object {
    public MyClass() {
        super();
        // μƒμ„±μž λ‚΄μš© μž‘μ„±
    }
}

μœ„μ™€ 같이 Object 클래슀λ₯Ό μƒμ†λ°›μ•„μ•Όλ§Œ μ»΄νŒŒμΌλŸ¬λŠ” Object 클래슀의 μƒμ„±μžλ₯Ό 찾을 수 μžˆμœΌλ―€λ‘œ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šκ²Œ λ©λ‹ˆλ‹€.

3.3 클래슀의 상속 μ œκ±°ν•˜κΈ°

이 μ—λŸ¬λ₯Ό ν•΄κ²°ν•˜λŠ” 또 λ‹€λ₯Έ 방법은 클래슀의 상속을 μ œκ±°ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 상속 ꡬ쑰λ₯Ό λ³€κ²½ν•¨μœΌλ‘œμ¨ Object 클래슀의 μƒμ„±μž 호좜과 κ΄€λ ¨λœ 였λ₯˜λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 상속이 ν•„μš”ν•˜μ§€ μ•Šμ„ 경우, ν΄λž˜μŠ€κ°€ Object 클래슀λ₯Ό 기본적으둜 상속받지 μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.

public class MyClass {
    // 클래슀 λ‚΄μš© μž‘μ„±
}

클래슀의 상속을 μ œκ±°ν•  경우, Object 클래슀의 κΈ°λŠ₯κ³Ό λ©”μ†Œλ“œλ₯Ό μ§μ ‘μ μœΌλ‘œ μ‚¬μš©ν•  수 μ—†μ§€λ§Œ, λŒ€λΆ€λΆ„μ˜ κ²½μš°μ—λŠ” 상속 없이도 ν•„μš”ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3.4 였λ₯˜ λ¬΄μ‹œν•˜κΈ°

λ§ˆμ§€λ§‰μœΌλ‘œ, 이 μ—λŸ¬λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 방법은 였λ₯˜λ₯Ό λ¬΄μ‹œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 방법은 Object 클래슀의 μƒμ„±μž 호좜과 κ΄€λ ¨λœ 였λ₯˜λ₯Ό ν•΄κ²°ν•˜μ§€ μ•ŠλŠ” λŒ€μ‹ , μ»΄νŒŒμΌλŸ¬μ—κ²Œ ν•΄λ‹Ή 였λ₯˜λ₯Ό λ¬΄μ‹œν•˜λ„λ‘ μ§€μ‹œν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 방법은 μ£Όμ˜ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•˜λ©°, 였λ₯˜μ˜ 원인이 λͺ…ν™•ν•˜κ²Œ μ΄ν•΄λ˜κ³  μžˆμ„ λ•Œμ—λ§Œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

클래슀 μ •μ˜μ— @SuppressWarnings("unused") μ–΄λ…Έν…Œμ΄μ…˜μ„ μΆ”κ°€ν•˜μ—¬ ν•΄λ‹Ή 였λ₯˜λ₯Ό λ¬΄μ‹œν•˜λ„λ‘ μ§€μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@SuppressWarnings("unused")
public class MyClass {
    // 클래슀 λ‚΄μš© μž‘μ„±
}

ν•˜μ§€λ§Œ 이 방법은 였λ₯˜μ˜ 원인을 ν•΄κ²°ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— ꢌμž₯λ˜λŠ” 방법은 μ•„λ‹™λ‹ˆλ‹€. κ°€λŠ₯ν•œν•œ λͺ…μ‹œμ μΈ ν•΄κ²° 방법을 μ„ νƒν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

4. ν•΄κ²° 방법 쀑 κ°€μž₯ 일반적으둜 μ‚¬μš©λ˜λŠ” 방법

κ°€μž₯ 일반적으둜 μ‚¬μš©λ˜λŠ” ν•΄κ²° 방법은 λͺ…μ‹œμ μœΌλ‘œ μƒμ„±μžλ₯Ό μ •μ˜ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 이 방법은 가독성이 μ’‹κ³  μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λ§Œλ“œλŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

일반적으둜 클래슀λ₯Ό μ •μ˜ν•  λ•Œ μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜κ²Œ 되면 ν•΄λ‹Ή 클래슀의 λ””ν΄νŠΈ μƒμ„±μžλŠ” μžλ™μœΌλ‘œ μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ Object 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•΄ super() ν‚€μ›Œλ“œκ°€ μžλ™μœΌλ‘œ μƒμ„±λ˜μ§€ μ•Šμ•„μ„œ 이 μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ λͺ…μ‹œμ μœΌλ‘œ μƒμ„±μžλ₯Ό μ •μ˜ν•˜μ—¬ 이 μ—λŸ¬λ₯Ό ν•΄κ²°ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€:

public class MyClass {
    public MyClass() {
        // μƒμ„±μž λ‚΄μš© μž‘μ„±
    }
}

μœ„μ™€ 같이 μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜λ©΄, Object 클래슀의 μƒμ„±μž 호좜과 κ΄€λ ¨λœ 였λ₯˜λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 방법은 κ°€μž₯ 일반적으둜 μ‚¬μš©λ˜λŠ” 방법이며, 클래슀의 ꡬ쑰λ₯Ό λͺ…ν™•ν•˜κ²Œ 보여주어 가독성을 λ†’μ΄λŠ”λ° 도움이 λ©λ‹ˆλ‹€.

5. 이 μ—λŸ¬λ₯Ό μ˜ˆλ°©ν•˜λŠ” 방법

이 μ—λŸ¬λ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λͺ…μ‹œμ μœΌλ‘œ μƒμ„±μžλ₯Ό μ •μ˜ν•˜λŠ” 것이 κ°€μž₯ 쒋은 λ°©λ²•μž…λ‹ˆλ‹€. λ””ν΄νŠΈ μƒμ„±μžλŠ” μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜λŠ”λ°, μ΄λ•Œ Object 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λ €κ³  ν•˜λ©΄μ„œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. λͺ…μ‹œμ μœΌλ‘œ μƒμ„±μžλ₯Ό μ •μ˜ν•¨μœΌλ‘œμ¨ λ””ν΄νŠΈ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” 것이 μ•„λ‹ˆλΌ λͺ…μ‹œμ μœΌλ‘œ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 예방 방법은 λ‹€μŒκ³Ό 같이 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

public class MyClass {
    public MyClass() {
        // μƒμ„±μž λ‚΄μš© μž‘μ„±
    }
}

μœ„μ™€ 같이 μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•¨μœΌλ‘œμ¨ λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜μ§€ μ•Šλ„λ‘ ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ Object 클래슀의 μƒμ„±μž 호좜과 κ΄€λ ¨λœ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ, 클래슀λ₯Ό μ •μ˜ν•  λ•Œ Object 클래슀λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μƒμ†λ°›λŠ” 방법도 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

public class MyClass extends Object {
    public MyClass() {
        super();
        // μƒμ„±μž λ‚΄μš© μž‘μ„±
    }
}

μœ„μ™€ 같이 Object 클래슀λ₯Ό 상속받도둝 ν•¨μœΌλ‘œμ¨ Object 클래슀의 μƒμ„±μž 호좜과 κ΄€λ ¨λœ 였λ₯˜λ₯Ό μ˜ˆλ°©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 방법듀을 μ‚¬μš©ν•˜μ—¬ 클래슀λ₯Ό μ •μ˜ν•  λ•Œ 였λ₯˜λ₯Ό μ˜ˆλ°©ν•˜λŠ” 것이 κ°€μž₯ 쒋은 λ°©λ²•μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œμ˜ 가독성을 높일 수 있고, λΆˆν•„μš”ν•œ 였λ₯˜λ₯Ό 미리 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€