Skip to content

Latest commit

Β 

History

History
82 lines (58 loc) Β· 4.42 KB

File metadata and controls

82 lines (58 loc) Β· 4.42 KB

AssertionError

AssertionErrorλž€ λ¬΄μ—‡μΈκ°€μš”?

**AssertionError**λŠ” μžλ°”μ—μ„œ **μ—λŸ¬(Error)**의 ν•œ μ’…λ₯˜λ‘œ, 주둜 ν”„λ‘œκ·Έλž¨μ˜ 논리적인 였λ₯˜κ°€ λ°œμƒν–ˆμ„ λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. 이 μ—λŸ¬λŠ” 일반적으둜 κ°œλ°œμžκ°€ μ˜ˆμΈ‘ν•  수 μ—†λŠ” 상황이 λ°œμƒν–ˆμ„ λ•Œ 이λ₯Ό μ•Œλ¦¬κΈ° μœ„ν•΄ λ˜μ§‘λ‹ˆλ‹€.

1. AssertionError의 λͺ©μ 

  • 개발 μ€‘μ—λ§Œ μ‚¬μš©: AssertionErrorλŠ” 주둜 개발 및 디버깅 λ‹¨κ³„μ—μ„œ ν”„λ‘œκ·Έλž¨μ˜ λ‚΄λΆ€ μƒνƒœλ₯Ό κ²€μ¦ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
  • λΆˆκ°€λŠ₯ν•œ 상황을 λ‚˜νƒ€λƒ„: μ½”λ“œμ—μ„œ μ ˆλŒ€λ‘œ λ°œμƒν•΄μ„œλŠ” μ•ˆ λ˜λŠ” 상황이 λ°œμƒν–ˆμ„ λ•Œ 이λ₯Ό μ•Œλ¦¬κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • μ˜ˆμ™Έ 처리의 κ°„μ†Œν™”: 검사 μ˜ˆμ™Έ(checked exception)λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” λ²ˆκ±°λ‘œμ›€μ„ ν”Όν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

2. μ‚¬μš© μ˜ˆμ‹œ

μ˜ˆμ‹œ 1: μ ˆλŒ€ λ°œμƒν•˜μ§€ μ•ŠλŠ” μ˜ˆμ™Έ 처리

Cloneable을 κ΅¬ν˜„ν•œ ν΄λž˜μŠ€μ—μ„œ clone() λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•  λ•Œ, CloneNotSupportedException이 λ°œμƒν•  수 μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ Object의 clone() λ©”μ„œλ“œλŠ” 이 μ˜ˆμ™Έλ₯Ό 던질 수 μžˆλ„λ‘ μ„ μ–Έλ˜μ–΄ μžˆμœΌλ―€λ‘œ, 이λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

@Override
public Object clone() {
    try {
        return super.clone();
    } catch (CloneNotSupportedException e) {
        throw new AssertionError(); // 이 μ˜ˆμ™ΈλŠ” μ ˆλŒ€ λ°œμƒν•˜μ§€ μ•ŠμŒ
    }
}
  • μ„€λͺ…: CloneNotSupportedException은 검사 μ˜ˆμ™Έμ§€λ§Œ, 이 μ½”λ“œμ—μ„œλŠ” μ ˆλŒ€ λ°œμƒν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, 이λ₯Ό μž‘μ•„μ„œ AssertionErrorλ₯Ό λ˜μ§‘λ‹ˆλ‹€.
  • 의미: AssertionErrorλ₯Ό 던짐으둜써 이 μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ 논리적 였λ₯˜κ°€ μžˆλ‹€λŠ” 것을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

μ˜ˆμ‹œ 2: λΆˆκ°€λŠ₯ν•œ 쑰건 검증

int result = calculateValue();
assert result >= 0 : "Result should not be negative";
  • μ„€λͺ…: assert ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 쑰건이 거짓일 경우 AssertionErrorλ₯Ό λ˜μ§‘λ‹ˆλ‹€.
  • 주의: assert ν‚€μ›Œλ“œλŠ” 기본적으둜 λΉ„ν™œμ„±ν™”λ˜μ–΄ 있으며, μ‹€ν–‰ μ‹œ -ea μ˜΅μ…˜μ„ μ‚¬μš©ν•΄μ•Ό μž‘λ™ν•©λ‹ˆλ‹€.

3. AssertionError와 μ˜ˆμ™Έ 처리

  • Error vs. Exception:
    • ErrorλŠ” μ‹¬κ°ν•œ μ‹œμŠ€ν…œ 였λ₯˜λ‘œ, ν”„λ‘œκ·Έλž¨μ΄ μ •μƒμ μœΌλ‘œ 볡ꡬ할 수 μ—†λŠ” 상황을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • Exception은 ν”„λ‘œκ·Έλž¨μ—μ„œ μ²˜λ¦¬ν•  수 μžˆλŠ” μ˜ˆμ™Έ 상황을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • AssertionError의 νŠΉμ§•:
    • Unchecked Error: RuntimeException처럼 AssertionErrorλŠ” 검사 μ˜ˆμ™Έκ°€ μ•„λ‹ˆλ―€λ‘œ throws μ ˆμ— μ„ μ–Έν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
    • ν”„λ‘œκ·Έλž¨ μ’…λ£Œ μœ λ„: λ°œμƒ μ‹œ ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œμ‹œν‚€λŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€.

4. AssertionErrorλ₯Ό μ‚¬μš©ν•˜λŠ” 이유

  • λΆˆν•„μš”ν•œ μ˜ˆμ™Έ μ „νŒŒ λ°©μ§€: 검사 μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ λΆˆν•„μš”ν•œ μ½”λ“œκ°€ μΆ”κ°€λ˜λŠ” 것을 λ°©μ§€ν•©λ‹ˆλ‹€.
  • 논리적 였λ₯˜ ν‘œμ‹œ: κ°œλ°œμžκ°€ μ˜ˆμƒν•˜μ§€ λͺ»ν•œ 상황이 λ°œμƒν–ˆμŒμ„ λͺ…ν™•ν•˜κ²Œ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • 디버깅 μš©μ΄μ„±: μ–΄λ””μ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆλŠ”μ§€ μ¦‰μ‹œ μ•Œ 수 μžˆμ–΄ 디버깅이 μ‰¬μ›Œμ§‘λ‹ˆλ‹€.

5. μ£Όμ˜μ‚¬ν•­

  • ν”„λ‘œλ•μ…˜ μ½”λ“œμ—μ„œλŠ” μ‚¬μš©μ— 신쀑해야 ν•©λ‹ˆλ‹€: AssertionErrorλŠ” 주둜 개발 및 ν…ŒμŠ€νŠΈ λ‹¨κ³„μ—μ„œ μ‚¬μš©λ˜λ©°, μ‹€μ œ 운영 ν™˜κ²½μ—μ„œλŠ” μ‚¬μš©μžμ—κ²Œ λ…ΈμΆœλ˜μ§€ μ•Šλ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ˜ˆμƒ κ°€λŠ₯ν•œ μ˜ˆμ™Έ μƒν™©μ—λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€: μž…λ ₯ 값이 잘λͺ»λ˜μ—ˆκ±°λ‚˜ λ„€νŠΈμ›Œν¬ 였λ₯˜ λ“± 예츑 κ°€λŠ₯ν•œ μƒν™©μ—μ„œλŠ” μ μ ˆν•œ μ˜ˆμ™Έ(Exception)λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

6. μš”μ•½

  • AssertionErrorλŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ μ ˆλŒ€λ‘œ λ°œμƒν•΄μ„œλŠ” μ•ˆ λ˜λŠ” 논리적 였λ₯˜λ₯Ό λ‚˜νƒ€λ‚Ό λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • Cloneable을 κ΅¬ν˜„ν•œ ν΄λž˜μŠ€μ—μ„œ clone() λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•  λ•Œ, λ°œμƒν•  수 μ—†λŠ” CloneNotSupportedException을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ AssertionErrorλ₯Ό λ˜μ§‘λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 μ½”λ“œμ˜ 가독성을 높이고, λΆˆν•„μš”ν•œ μ˜ˆμ™Έ 처리 μ½”λ“œλ₯Ό 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

μΆ”κ°€ μ°Έκ³ :

  • assert ν‚€μ›Œλ“œ: μžλ°”μ—μ„œ assertλ₯Ό μ‚¬μš©ν•˜λ©΄ νŠΉμ • 쑰건이 참인지 검사할 수 있으며, 거짓인 경우 AssertionErrorκ°€ λ˜μ Έμ§‘λ‹ˆλ‹€.

  • ν™œμš© μ˜ˆμ‹œ:

    public void setAge(int age) {
        assert age >= 0 : "Age cannot be negative";
        this.age = age;
    }
  • μ‹€ν–‰ 방법: JVM μ‹€ν–‰ μ‹œ -ea λ˜λŠ” -enableassertions μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ assert 문을 ν™œμ„±ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€.