์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ด์œ 

  • ๊ณผ๊ฑฐ์— ์ฃผ๋ฅ˜์ด๋˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์€ ์ง€์†์ ์œผ๋กœ ์ž‘๋™์ด ๋ณด์žฅ๋˜์–ด์•ผ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด โ€œํ•˜๋“œ์›จ์–ด๊ฐ€ ๋ฉˆ์ถ”๋Š” ํฌ๋ž˜์‹œโ€๊ฐ€ ๋ฌด์„œ์›Œ์„œ ๊ทธ๋žฌ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์š”์ฆ˜์˜ ๊ฒฝ์šฐ ์šด์˜์ฒด์ œ๊ฐ€ ํ•ด์ฃผ๋‹ˆ ์˜ˆ์ „์— ๋น„ํ•ด ์‹ค์ต์ด ์ค„์–ด๋“ค์—ˆ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฆ˜์€ ์˜ˆ์™ธ๋ฅผ ๋œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ, ์ œํ’ˆ ํ’ˆ์งˆ์— ๋” ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ „์˜ ์ฃผ์žฅ๋“ค

  • ํ•จ์ˆ˜์—์„œ null์ด๋‚˜ int ๋ฐ˜ํ™˜ํ•ด์„œ ์˜ค๋ฅ˜ ์ƒํ™ฉ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์€ ๊ธˆ์ง€์•ผ!
  • ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜๊ฐ’์€ ์‹ค์ œ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•ด์•ผํ•ด. Bool๋„ ์•ˆ๋ผ
  • ์‹คํŒจ์•ผ? ๋ฌด์กฐ๊ฑด ์—๋Ÿฌ ๋˜์ ธ
  • ๋ฐ›๋Š”์ชฝ์€ ์˜ˆ์™ธ๋กœ ์ฒ˜๋ฆฌํ•ด.

ํ•˜์ง€๋งŒ..

  • ๋„ˆ๋ฌด ์ข‹์€๋ฐ
  • ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œํ•จ
  • ์ œ๋Œ€๋กœ ํ•œ ์‚ฌ๋žŒ์ด ๋“œ๋ฌผ์—ˆ๋‹ค.

ํ•จ์ˆ˜๊ฐ€ ๋”์ด์ƒ ๋ธ”๋ž™๋ฐ•์Šค๊ฐ€ ์•„๋‹ˆ๊ฒŒ ๋œ๋‹ค.

  • ๊ทธ๊ฒŒ ์–ด๋ ค์› ๋˜ ์ด์œ ๋Š”, ์˜ˆ์™ธ๋ฅผ ๋ฐ›๋Š”์ชฝ์—์„œ ์–ด๋””์„œ ์˜จ์ง€ ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.
  • ์ƒ์œ„์—์„œ ๋ฐ›๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์•Œ๋ ค๋ฉด ๋ชจ๋“  ํ•จ์ˆ˜๋ฅผ ๋‹ค ๊นŒ๋ด์•ผ ํ•œ๋‹ค.
    • ์ฆ‰, ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๋„๋Š”์ง€ ๋ชฐ๋ผ๋„ ๋œ๋‹ค๋Š” ๊ทœ์น™์„ ์–ด๊ฒผ๋‹ค.
  • ์กฐ๊ธˆ๋งŒ ์‹œ์Šคํ…œ์ด ๋ณต์žกํ•ด์ง€๋ฉด, ์–ด๋””์„œ ๋ถˆ๋ฆฌ๋Š”์ง€ ์ง„์งœ ๋ชจ๋ฅธ๋‹ค..
  • ์‚ฌ์‹ค ํ˜ธ์ถœํ•˜๋Š”์ชฝ์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด์—์„œ ๋‚ด๋ฑ‰์€ ์—๋Ÿฌ๋ฅผ ๋ฐท๋Š”๋‹ค๋Š”๊ฒŒ ์บก์Šํ™”์—๋„ ์–ด๊ธ‹๋‚œ๋‹ค.
  • ์ด๋Ÿฐ ๊ฒƒ ๋•Œ๋ฌธ์— ์ฃผ์„๋„ ๋‹ฌ์•„๋ดค๋Š”๋ฐ, ์‚ฌ๋žŒ๋“ค์ด ์ฃผ์„์„ ์ž˜ ์•ˆ์ฝ์Œ ใ…‹ใ…‹

์ž๋ฐ”๋Š” ๋Œ€๋น„๋˜์–ด ์žˆ์—ˆ์Œ

  • ์ด๋ ‡๊ฒŒ ์–ด๋””์„œ ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ค๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Java๋Š” ์˜ˆ์™ธ๋ฅผ ๋‘์ข…๋ฅ˜๋กœ ๋‚˜๋ˆ”
    • unchecked: ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋™์ผ
      • ArithmeticException
      • BufferOverflowException
      • ClassCastException
    • checked: Java์—๋งŒ ์žˆ๋Š” ์˜ˆ์™ธ
      • IOException
      • SQLException
      • TimeoutException

Unchecked

  • ์–ด๋””์„œ ์–ด๋–ค ์˜ˆ์™ธ๊ฐ€ ๋‚˜๋Š”์ง€ ํ•œ๋ˆˆ์— ์•ˆ๋ณด์ธ๋‹ค.
  • RuntimeException์„ ์ƒ์†
    • ์ด์ „ ๊ธ€์—์„œ ๋ณด์•˜๋˜ UserNotFoundException์ด ์ด๋ฅผ ์ƒ์†ํ•ด์„œ ๋งŒ๋“  ์ปค์Šคํ…€ ์—๋Ÿฌ์˜€์Œ
    • ์ผ๋ฐ˜์ ์ธ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์˜ ์˜ˆ์™ธ์™€ ๊ฐ™์Œ
  • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋”ฐ๋กœ ๊ฒ€์‚ฌ๋ฅผ ์•ˆ ํ•ด์ค˜์„œ unchecked ์˜ˆ์™ธ๋ผ ๋ถ€๋ฆ„

Checked

  • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์คŒ
  • ์–ด๋Š ๋ฉ”์„œ๋“œ๊ฐ€ ์–ด๋–ค ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š”์ง€ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ์—์„œ ๋‘˜์ค‘ ํ•˜๋‚˜๋ฅผ ์•ˆํ•˜๋ฉด โ€œ์ปดํŒŒ์ผโ€ ์˜ค๋ฅ˜๋ฅผ ์ค€๋‹ค.
    1. ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ๊ทธ ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ (catch๋ฌธ ์•ˆ์—์„œ)
    2. ์ฒ˜๋ฆฌ๋ฅผ ์•ˆํ•œ๋‹ค๋ฉด, ๊ทธ ์‚ฌ์‹ค์„ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‚ด์ฒ˜ ์˜†์— ํ‘œ๊ธฐ
    • ํ•ด๋‹น ํ‘œ์‹œ๊ฐ€ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ‘œ๊ธฐ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ํ˜ธ์ถœ์ž๊ฐ€ 1, 2๋ฅผ ๋˜๋‹ค์‹œ ํ•ด์ค˜์•ผํ•จ

์˜ˆ์‹œ

public final class UserNotFoundException extends Exception {
    public UserNotFoundException() {
        super();
    }
 
    public UserNotFoundException(String message) {
        super(message);
    }
 
    public UserNotFoundException(String message, Throwable cause) {
        super(message, cause);
    }
}
  • Exception์„ ์ƒ์† ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— checked Exception์ด๋‹ค.
public User findUser(String username) throws UserNotFoundException {
    for (User user : users) {
        if (user.getUsername().equals(username)) {
            return user;
        }
    }
 
    throw new UserNotFoundException(username) // ์—๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋˜์ง
}
  • ์œ„์™€ ๊ฐ™์ด ์—๋Ÿฌ๋ฅผ ์ •์˜ํ•œ ์ƒํƒœ์—์„œ ์—๋Ÿฌ๋ฅผ ๋˜์ง€๋ คํ•˜๋ฉด, ๊ธฐ์กด๊ณผ ๊ฐ™์€ ๋ฌธ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋ช…์‹œ์ ์œผ๋กœ ์–ด๋–ค ์—๋Ÿฌ๋ฅผ ๋˜์ง€๋Š”์ง€ ํ‘œ๊ธฐํ•ด์•ผ ํ•œ๋‹ค.
public static void main(String[] args) {
    User user = null;
    try {
        user = db.findUser("wansik")
    } catch (UserNotFoundException e) {
        e.printStackTrace();
    }
 
}
  • ์ด์ „์—๋Š” ๊ทธ๋ƒฅ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ (findUser)
  • ์ด์ œ๋Š” try-catch๋ฅผ ๋ฐ˜๋“œ์‹œ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
  • ๋งŒ์•ฝ์— findUser์—์„œ throws UserNotFoundException์„ ์•ˆ์ ์–ด์คฌ๋‹ค๋ฉด?
    • ์ผ๋‹จ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋‚œ๋‹ค.
    • ์ƒ์œ„์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ฌธ์ด ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค.
public User findUser(String username) { // ์—ฌ๊ธฐ ๋น ์ง
    for (User user : users) {
        if (user.getUsername().equals(username)) {
            return user;
        }
    }
 
    throw new UserNotFoundException(username) 
}
 
public static void main(String[] args) throws UserNotFoundException { // ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•จ
    User user = db.findUser("wansik")
    
}
  • ์•ˆ๋„ฃ์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜~

๋‘˜์˜ ๊ตฌ๋ถ„๋ฒ•

  • ๊ธฐ๋ณธ์ ์œผ๋กœ Exception์€ Checked Exception์ด๋‹ค.
  • UnChecked Exception์ด ํŠน์ด ์ผ€์ด์Šค๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

Checked Exception์˜ ์กด์žฌ์˜์˜

  • ์˜ˆ์ „์—๋Š” Checked๋ฅผ ์ข‹์•„ํ–ˆ๋‹ค. ์˜๋„๋Š” ์ข‹์•˜์œผ๋‚˜ ์‹คํŒจํ–ˆ์ง€๋งŒ.
  • API ์ œ์ž‘์ž ์ž…์žฅ์—์„œ๋Š” ํ•ด๋‹น ์—๋Ÿฌ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ ์Œ์œผ๋กœ์จ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์˜ˆ์™ธ์ž„์„ ์•Œ๋ ค์ค€๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ โ€œ์ฒ˜๋ฆฌํ•˜๋ผโ€๋Š” ์˜๋ฏธ๊ฐ€ ๋ญ˜๊นŒ?

ํ”„๋กœ๊ทธ๋žจ์„ ๊ทธ๋ƒฅ ์ข…๋ฃŒํ•ด๋ผ?

  • ๊ฐ€์žฅ ์ƒ์œ„์˜ JVM๊นŒ์ง€ ๋ณด๋‚ด์„œ ๋๋‚ด๋ผ
  • ๋งŒ์•ฝ ๊ทธ๋ ‡๋‹ค๋ฉด ์‹ค์ œ๋กœ ๊ทธ ์˜ˆ์™ธ๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜์—๋Š” ํ•˜๋ฐฉ์—์„œ ๋ณด๋‚ด๋Š” ๋ชจ๋“  ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ throws ์˜ˆ์™ธ1, ์˜ˆ์™ธ2... ์ ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

  • ๋งŒ์•ฝ์— ์—ฌ๊ธฐ์„œ A๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ„๋‹ค๋ฉด..?
  • ํŠธ๋ฆฌ์˜ ๊นŠ์ด๊ฐ€ 4๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค๋ฉด..?
public void A() throws ExceptionB, ExceptionC, ExceptionD.............

์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์ง„ํ–‰ํ•ด๋ผ

  • ์˜ˆ์™ธ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜๋Š” ์žˆ๋Š”๋ฐ, ๋ฌด์‹œํ•˜๋ ด
    • ๊ฟ€๊บฝ ์‚ผํ‚จ๋‹ค (swallow)
  • ๋กœ๊ทธ ์ถœ๋ ฅ์ •๋„?
  • ์•„๋‹ˆ ๊ทธ๋Ÿผ ์™œ ์˜ˆ์™ธ๋ฅผ ๋‚ ๋ ค

ํ”„๋กœ๊ทธ๋žจ์„ ์ •์ƒ ์ƒํƒœ๋กœ ํšŒ๋ณต์‹œ์ผœ์„œ ๋™์ž‘์‹œ์ผœ๋ผ

  • ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š”๋ฐ, ์ฒ˜๋ฆฌ์•ˆํ•˜๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊นŒ์ง€ ๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์—๋Ÿฌ๋ฅผ ๋˜์กŒ๋‹ค๋ฉด
  • ๋‹น์—ฐํžˆ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•˜๋„๋ก ํ•˜๋ผ๋Š” ์˜๋ฏธ์ผ ๊ฒƒ
  • ๊ตณ์ด checked๋กœ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด, ํšŒ๋ณต์‹œํ‚ค๋ผ๋Š” ์˜๋ฏธ๋‹ค.
  • ์ด๋Ÿฐ ์˜๋ฏธ๋ฅผ ๋‚ดํฌํ–ˆ๋˜ ๊ฒƒ์ด ๊ณผ๊ฑฐ Java์—์„œ ์„ ํ˜ธํ•˜๋˜ ๋ฐฉ์‹์ด๋‹ค.
    • ๊ทธ๋ž˜์„œ Exception ํด๋ž˜์Šค๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ checked์˜€์Œ

ํšŒ๋ณต์ด๋ž€?

  • ํ  ๊ทธ๋Ÿฐ๋ฐ ํšŒ๋ณต์ด๋ผ๋Š” ๊ฒƒ์€ ๋ญ˜๊นŒ?
  • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „ ์ƒํƒœ๋กœ ๋Œ๋ ค๋‹ฌ๋ผ๋Š” ์˜๋ฏธ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
  • ์ด๊ฒŒ ๊ฐ€๋Šฅํ• ๊นŒ? ๋ชจ๋“  ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์ฆ‰, ๋‹จ๋ฐฉํ–ฅ ์—ฐ์‚ฐ์˜ ํ™•๋ฅ ์ด ๋” ๋†’๋‹ค. ์—ญ์‚ฐ์€ ์–ด๋ ต๋‹ค.
  • ์ง„์งœ ์–ด๋ ต๊ณ  ์—ด๋ฐ›๊ณ  ํž˜๋“ค๋‹ค ์ด๊ฑฐ. ๋ชจ๋“  ์ฝ”๋“œ์—์„œ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ฒ ๋‹ค? ๋ถˆ๊ฐ€๋Šฅ.

์˜ˆ์™ธ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • ํด๋ž˜์Šค ๋ช‡๊ฐœ๋งŒ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ๋Š” ๊ฐ€๋Šฅ
  • ๋ณต์žกํ•  ์ˆ˜๋ก ์–ด๋ ค์›Œ์ง„๋‹ค.
  • ์•„์˜ˆ ์ด๊ฑธ ์‹œ๋„ํ•˜์ง€ ๋ง๋ผ๋Š” ๋ง์€ ์•„๋‹ˆ๋‹ค.
    • ์—ฌ์ „ํžˆ ํ•„์š”ํ•œ ๊ณณ์ด ์ผ๋ถ€ ์žˆ๋‹ค.
    • ๋ชจ๋“  ๊ณณ์—์„œ ์ด๋Ÿด ์ˆ˜๋Š” ์—†๋‹ค๋Š” ๊ฒƒ..

๊ทผ๋ž˜์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํŠธ๋ Œ๋“œ

  1. ๊ทธ๋ƒฅ unchecked ์˜ˆ์™ธ๋ฅผ ์“ฐ์ž
    • ์‹ฌ์ง€์–ด checked๋ฅผ unchecked๋กœ ๊ฐ์‚ฌ์„œ ๋‹ค์‹œ ๋˜์ง€์ž๋Š” ์˜๊ฒฌ๋„ ์žˆ์Œ
    • ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ˆ„๊ฐ€ ์–ด๋–ค ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š”์ง€๋Š” ํ•œ๋ˆˆ์— ์•ˆ๋ณด์ธ๋‹ค. (์—ฌ์ „ํžˆ)
  2. ์˜ˆ์™ธ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์€ ์žฌ๋ถ€ํŒ…
  • ์ฆ‰, ์˜ˆ์™ธ ๋ฐœ์ƒ ์ด๋ฒคํŠธ๋กœ๋ถ€ํ„ฐ ์‹œ์Šคํ…œ์„ ํšŒ๋ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋””๋ฒ„๊น…์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ตœ๋Œ€ํ•œ ๋‚จ๊ธฐ๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒ์‹œํ‚ด

์˜ˆ์™ธ๋ฅผ ์–ด๋””๊นŒ์ง€ ์„ธ๋ถ„ํ™”ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

  • ์˜ˆ์ „์— ์„ ํ˜ธํ•˜๋˜ ๋ฐฉํ–ฅ
    • ์˜ˆ์™ธ๋ฅผ ์ข…๋ฅ˜๋ณ„๋กœ catchํ•œ๋‹ค.
    • ์˜ˆ์™ธ ํƒ€์ž…๋งˆ๋‹ค ์ฒ˜๋ฆฌ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•ด์ฃผ์—ˆ์–ด์•ผ ํ–ˆ์Œ
    • ์ฃผ๋กœ checked ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉ
    • ์ฆ‰, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ์— ๋งž๋Š” ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์—ˆ์—ˆ์Œ
  • ์š”์ฆ˜์— ์ข€ ๋” ์„ ํ˜ธํ•˜๋Š” ๋ฐฉํ–ฅ
    • ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ โ€œํ•œ๋ฒˆ์—โ€ ์ฒ˜๋ฆฌํ•˜์ž.
    • ์ฃผ๋กœ main()์—์„œ ํ•œ๋ฒˆ๋งŒ!
    • ๋”ฐ๋ผ์„œ ๋‹ค์‹œ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ์ผ๋„ ํ›จ์”ฌ ์ ์–ด์ง„๋‹ค.
    • ์—ฌ์ „ํžˆ ๋˜์งˆ ๋•Œ๋Š” ์„ธ์„ธํ•œ ์˜ˆ์™ธ ํƒ€์ž…์„ ๋˜์ง„๋‹ค.
    • ๋‹ค๋งŒ catch๋ฅผ Exception์œผ๋กœ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ๋ฟ์ด๋‹ค.

์กฐ์‹ฌํ•  ๋‚ด์šฉ๋“ค

  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์€ ๋ชจ๋“  ์˜ˆ์™ธ๋กœ๋ถ€ํ„ฐ ํšŒ๋ณตํ•ด์•ผ ํ•œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒ์‹œ์ผœ๋„ ๋˜๋Š” ์œ ์ผํ•œ ๊ฒฝ์šฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•  ๋•Œ ๋ฟ์ด๋‹ค.
    • ์‚ฌ๋žŒ์ด ๋ณด๊ณ  ์žˆ์œผ๋‹ˆ๊นŒ..?
    • ๋ˆ„๊ตฐ๊ฐ€๋Š” ์žฌ๋ถ€ํŒ…์„ ํ•ด์ค˜์•ผํ–ˆ๋˜ ์‹œ์ ˆ์˜ ๊ธ€์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • checked ์˜ˆ์™ธ๋ฅผ ์„ ํ˜ธํ•˜๋˜ ์‹œ์ ˆ์˜ ๋ง์ž„
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚˜์œ ์กฐ์–ธ์ด๋‹ค. ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋œ๋‹ค.
  • ์ด๋Ÿฐ ์กฐ์–ธ์€ ์›น์„œ๋ฒ„์™€ ๊ฐ™์ด ํ•ญ์‹œ ๊ตฌ๋™๋˜์•ผ ํ•จ์—๋„ ์—๋Ÿฌ๊ฐ€ ๋– ์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ฃฝ์–ด๋ฒ„๋ฆฌ๋Š” ๊ทธ ๊ณตํฌ๋ฅผ ๋ชธ์ด ๊ธฐ์–ตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ง€ ์•Š์„๊นŒ?

์ง€๊ฒจ๋ณด๋Š” ์‚ฌํ•จ์—†์ด ์ž‘๋™ํ•ด์•ผ ํ•œ๋‹ค๋ฉด?

  • ์›น์„œ๋ฒ„ ๊ฐ™์€ ์˜ˆ
  • ๊ทผ๋ž˜์˜ OS๋Š” ํ•˜๋“œ์›จ์–ด ์žฌ๋ถ€ํŒ…์ด ํ•„์š”์—†๋‹ค.
    • ํ”„๋กœ๊ทธ๋žจ๋งˆ๋‹ค ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์ œ๊ณต
    • ํ”„๋กœ๊ทธ๋žจ ํฌ๋ž˜์‹œ ๋‚ฌ๋‹ค๊ณ  ๊ธฐ๊ณ„๊ฐ€ ํฌ๋ž˜์‹œ ๋‚˜๋Š” ๊ฒƒ ์•„๋‹˜
  • ํ”„๋กœ๊ทธ๋žจ ์žฌ์‹คํ–‰์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ด๋‹น
    • ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด ํฌ๋ž˜์‹œ๊ฐ€ ๋‚˜์„œ ์‚ฌ๋ผ์ง€๋ฉด ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋„๋ก ์„ค์ • ๊ฐ€๋Šฅ
    • ์žฌ์‹œ์ž‘์‹œ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐฐ์ •๋ฐ›์€ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ˆ ๊นจ๋—ํ•˜๊ฒŒ ์‹œ์ž‘
  • ์ด๊ฑธ ๋ฌด์‹œํ•˜๊ณ  ์˜ˆ์™ธ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‹œ๋„ํ–ˆ๋‹ค๊ฐ€ ์‹คํŒจํ–ˆ๋‹ค๋ฉด?
    • ํ”„๋กœ๊ทธ๋žจ์ด ์˜คํžˆ๋ ค ๋” ์ด์ƒํ•œ ์ƒํƒœ์— ๋น ์ ธ ๋” ํฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ
    • ์ด๋Ÿฐ ์ƒํƒœ์˜ ํ”„๋กœ๊ทธ๋žจ์„ โ€œ์ข€๋น„ ํ”„๋กœ๊ทธ๋žจโ€์ด๋ผ๊ณ  ํ•จ

์ œ์–ด ํ๋ฆ„์šฉ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒ

  • goto๋ž‘ ๊ฐœ๋…์ด ๊ฐ™์Œ
  • ํ•จ์ˆ˜ ๋ฒ”์œ„์—์„œ ์ ํ”„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ํ˜ธ์ถœ ์Šคํƒ ์–ด๋””๋กœ๋“  ์ ํ”„ ๊ฐ€๋Šฅ
  • goto๋ณด๋‹ค ๋” ๊ธฐ๊ฐ€๋ง‰ํžŒ hack
  • ์ ˆ๋Œ€ ์ ˆ๋Œ€ ๋‹ค์Œ์— ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒ

๋‚˜์œ ์˜ˆ

  • ์žฌ๊ท€ํ•จ์ˆ˜ ํ•œ๋ฐฉ์— ๋น ์ ธ๋‚˜์˜ค๊ธฐ
void search(TreeNode node, Object data) throws ResultException {
    if (node.data.equals(data)) {
        throw new ResultException(node);
    } else {
        search(node.leftChild, data);
        search(node.rightChild, data);
    }
}
  • return์ด void์ž„
  • ์—๋Ÿฌ๋กœ ๊ฒฐ๊ณผ๊ฐ’์„ catchํ•ด์•ผ ํ•จ
  • ๋ฐ˜ํ™˜์„ ์ผ์ผํžˆ ์•ˆํ•˜๊ณ  hack์œผ๋กœ ๋˜์ง€๋Š” ๊ฒƒ์ž„

์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ์—๋งŒ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

  • 1์ดˆ๋งˆ๋‹ค ์˜ˆ์™ธ๋ฅผ 5๊ฐœ์”ฉ ๋˜์ง€๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ๊ฐํ•ด๋ณด์ž.
  • ๋””๋ฒ„๊น…์ด ํž˜๋“ค์–ด์„œ Exception์„ ์ฒดํฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋””๋ฒ„๊ฑฐ์— ์ถ”๊ฐ€ํ•ด์„œ ๋Œ๋ ธ์–ด
  • ์ด์ œ ๋Œ๋ฆฌ๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋ฉด ์–ด๋””์„œ ์˜ˆ์™ธ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๊ฒ ์ง€?
  • ๊ทผ๋ฐ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ํ•  ๋•Œ ์˜ˆ์™ธ๊ฐ€ 200๊ฐœ๊ฐ€ ๋‚˜์˜จ๋‹ค.
  • if๋ฌธ ๋Œ€์‹  ์˜ˆ์™ธ๋กœ ๋กœ์ง์„ ๊ฑธ์–ด์„œ ๊ณ„์† ๊ฑธ๋ฆฌ๋Š”๊ฑฐ์•ผ.
  • ์ด๋ฆ„ ๋ง๋Œ€๋กœ ์‚ฌ์šฉ์•ˆํ•˜๋ฉด ๋ชจ๋‘๊ฐ€ ๋™์˜ํ•˜๋Š” ๊ฐœ๋…์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋„๊ตฌ ์‚ฌ์šฉ์—๋„ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
  • ๋น„์Šทํ•œ ๊ฑธ๋กœ ์ปดํŒŒ์ผ ๊ฒฝ๊ณ ๋Š” ํ•ญ์ƒ ๊ณ ์น˜๋ ด

Reference