๊ฐœ์ฒด ์ง€ํ–ฅ์„ ์–˜๊ธฐํ•˜๋ฉด ๊ผญ ๋‚˜์˜ค๋Š” ๋‹จ์–ด์ธ ์˜ˆ์™ธ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณธ๋‹ค.

Exception

  • ์‚ฌ์‹ค ์˜ˆ์™ธ๋Š” ๊ฐœ์ฒด์ง€ํ–ฅ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • ์‹œ๊ธฐ์ ์œผ๋กœ ๋น„์Šทํ•œ ๋•Œ ๋‚˜์™”๊ณ , ์†Œ์ˆ˜ ์ง„์˜์—์„œ ์˜ˆ์™ธ๊ฐ€ ๊ฐœ์ฒด์ง€ํ–ฅ์˜ ์œ ์ผํ•œ ๊ฑฐ๋ผ๋Š” ์‹์œผ๋กœ ๋งํ•˜์—ฌ ํ•ฉ์ณ์„œ ์ƒ๊ฐํ•˜๊ฒŒ ๋จ

try/catch/finally

try {
    // ์‹œ๋„ํ•  ์ฝ”๋“œ๋“ค
} catch (<์˜ˆ์™ธ ํด๋ž˜์Šค 1> <๋ณ€์ˆ˜๋ช…>) { // ํ•˜๋‚˜ ์ด์ƒ ์žˆ์„ ์ˆ˜ ์žˆ์Œ
    // ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ
} catch (<์˜ˆ์™ธ ํด๋ž˜์Šค 2> <๋ณ€์ˆ˜๋ช…>) {
    // ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ
} finally { // ์ƒ๋žต ๊ฐ€๋Šฅ
    // ์˜ˆ์™ธ์™€ ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ
}

catch์™€ ์˜ˆ์™ธ ํด๋ž˜์Šค(java)

  • ํŠน์ • ์˜ˆ์™ธ๋ฅผ ์บ์น˜ํ•  ์ˆ˜ ์žˆ์Œ
    • IOException: ์ž…์ถœ๋ ฅ ๊ด€๋ จ ํด๋ž˜์Šค๋“ค์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค
      • EOFException, FileNotFoundException ๋“ฑ
    • ArithmeticException: ์‚ฐ์ˆ ๊ณผ ๊ด€๋ จ๋œ ์˜ˆ์™ธ (0๋‚˜๋ˆ„๊ธฐ)
    • IndexOutOfBoundsException
  • ํŠน์ •ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด Exceptionํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์žก๋Š”๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ถ€๋ชจ ์˜ˆ์™ธ ํด๋ž˜์Šค๊ฐ€ ์ž์‹๋ณด๋‹ค ๋จผ์ €๋‚˜์˜ค๋ฉด ์•ˆ๋œ๋‹ค.
    • catch์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์—์„œ ๋‹ค ๋ง‰ํ˜€๋ฒ„๋ฆฐ๋‹ค.

finally ์˜ˆ

  • Swift์—์„œ๋Š” defer๋ฅผ ์ž˜์“ฐ๋ฉด ๋˜๊ฒ ๋‹ค.

C

static void WriteByte(string path, byte b)
{
  FileStream fs = null;
  try
  {
    fs = File.Open(path, FileMode.Open);
    fs.WriteByte(b);
  }
  catch (IOException e)
  {
    Console.Error.WriteLine($"{e.Message");
    return;
  }
}
string path;
WriteByte(path, 67);
WriteByte(path, 67); // ์˜ˆ์™ธ ๋ฐœ์ƒ
  • ํŠน์ • ๊ฒฝ๋กœ์˜ ํŒŒ์ผ์„ ์“ฐ๋Š” ๋™์ž‘์„ ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž.
  • ๊ทธ๋Ÿฐ๋ฐ, ๊ฐ™์€ ๊ฒฝ๋กœ์— ๋‘๋ฒˆ์“ฐ๋ ค๊ณ  ํ•˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ํŒŒ์ผ์„ ๋‹ซ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ!
  • ๊ทธ๋Ÿผ ํ•ญ์ƒ ๋‹ซ์•„์ค˜์•ผ ๊ฒ ๋„ค??
static void WriteByte(string path, byte b)
{
  FileStream fs = null;
  try
  {
    fs = File.Open(path, FileMode.Open);
    fs.WriteByte(b);
    fs.Close();
  }
  catch (IOException e)
  {
    Console.Error.WriteLine($"{e.Message");
    fs.Close();
    return;
  }
}
  • ๊ทผ๋ฐ ์ด๊ฑด ๋งž๋Š”๊ฐ€?
  • ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ์—๋„ ํŒŒ์ผ์— ์จ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๋ฅผ ์บ์น˜ํ•˜๋Š” ์ชฝ์—๋„ Close๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค.
  • ๋ญ”๊ฐ€ ์ด์ƒํ•˜๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋‘๋ฒˆ ํ˜ธ์ถœ์‹œ Open ํ•จ์ˆ˜๋Š” ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ์ง€๋งŒ, WriteByte() ํ•จ์ˆ˜์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฒ„๋ฆฌ๋ฉด ๊ณค๋ž€ํ•ด์ง„๋‹ค.
  • ๋งŒ์•ฝ IOException๋ง๊ณ  ๋‹ค๋ฅธ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Close๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์–ด๋– ํ•œ ์ƒํ™ฉ์—๋„ ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ํ›„์—๋Š” ๋ฌด๊ฒฐํ•œ ์ƒํƒœ๋ฅผ ๋ณด์žฅํ•ด์ค˜์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ๋ ‡์ง€ ์•Š๊ฒŒ ๋˜๋Š” ๊ฒƒ.
  • ์ฆ‰, ๋ฌด์กฐ๊ฑด ์ด ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ›„์—๋Š” ๋‹ค์‹œ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋„๋ก ๋‹ซ์•„์ฃผ์–ด์•ผ ํ•œ๋‹ค.
static void WriteByte(string path, byte b)
{
    FileStream fs = null;
    try
    {
        fs = File.Open(path, FileMode.Open);
        fs.WriteByte(b);
    }
    catch (IOException e)
    {
        Console.Error.WriteLine($"{e.Message");
        return;
    }
    finally
    {
        if (fs != null)
        {
            fs.Close();
        }
    }
}
  • ๊ทธ๋ž˜์„œ ๋‚˜์˜จ๊ฒŒ finally์ด๋‹ค.
  • ์–ด๋Š ๊ฒฝ๋กœ๋ฅผ ํƒ€์„œ ์‹คํ–‰๋˜๋„ ๋ฌด์กฐ๊ฑด ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

Java

  • ๋‹น์—ฐํžˆ ์ž๋ฐ”์—์„œ๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์†Œ์ง€๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
public void writeByte(String relativePath, byte b) {
    Path path = Paths.get(getClassPath(), relativePath);
 
    FileOutputStream out = null;
    try {
        out = new FileOutputStream(new File(path.toString()), true);
        out.write(b);
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
        return;
    }
}
  • ์–˜๋„ ์—ญ์‹œ๋‚˜ write์‹œ ์—๋Ÿฌ๋‚˜๋ฉด close์•ˆํ•˜๊ณ  ๋‚˜๊ฐ„๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ์ด๋…€์„์˜ ๊ฒฝ์šฐ ๋‹ซ์ง€ ์•Š๊ณ  ๋‘๋ฒˆ ํ˜ธ์ถœํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์•ˆ์ƒ๊ธด๋‹ค. ์™œ?

GC๊ฐ€ ๋Œ€์‹  ๋‹ซ์•„์ค€๋‹ค.

  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ฐธ์กฐ๋˜๊ณ  ์žˆ์ง€ ์•Š์€ FileOutputStream ๊ฐœ์ฒด๋ฅผ ํ•ด์ œ ์‹œํ‚จ๋‹ค.
    • GC๋Š” finalize()๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ์ด ์•ˆ์—์„œ close()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ๊ทธ ์‹œ์ ์ด ๋ช…์‹œ์ ์ด์ง€ ์•Š๋‹ค. ์ฆ‰ ์–ธ์ œ์ธ์ง€ ๋ชจ๋ฅธ๋‹ค.
  • GC ์‹คํ–‰์ „์— ๋ฆฌ์†Œ์Šค ํ•œ๊ณ„์น˜์— ๋‹ค๋‹ค๋ฅผ ์ˆ˜๋„ ์žˆ๋‹ค.
    • ์ด๋Ÿฌ๋ฉด ๋˜ ์˜ˆ์™ธ ๋ฐœ์ƒ
  • ์ฆ‰, ๋ช…์‹œ์ ์œผ๋กœ ํ•ด์•ผํ•  ์ผ์„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์ •๋„์—์„œ ๋ฒ—์–ด๋‚œ๋‹ค.
    • ๋งˆ๋ฒ• ๊ฐ™์€ ๊ฒƒ์— ์˜์กดํ•˜์ง€ ๋ง์ž.
  • ๊ทธ๋ž˜์„œ ์ ˆ๋Œ€ ์ €๋ ‡๊ฒŒ ์งœ๋ฉด ์•ˆ๋œ๋‹ค.
  • ์‹ค์ œ๋กœ๋„ Java 9๋ถ€ํ„ฐ finalize()๋ฅผ ์‚ญ์ œํ•  ์˜ˆ์ •์ด๋ผ ํ•จ
  • ๋งˆ๋ฒ•๊ฐ™์€ ๊ฒƒ(์–ธ์  ๊ฐ€ GC๊ฐ€ ๋‚ด๊ฐ€ ๋‹ซ์ง€ ์•Š์€ ๊ฑธ ๋‹ซ์•„์ค„๊ฑฐ์•ผ)์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.

์˜ฌ๋ฐ”๋ฅธ ์˜ˆ

public void writeByte(String relativePath, byte b) {
    Path path = Paths.get(getClassPath(), relativePath);
 
    FileOutputStream out = null;
    try {
        out = new FileOutputStream(new File(path.toString()), true);
        out.write(b);
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
        return;
    } finally {
        if out (out != null) {
            out.close();
        } catch (Exception e) {
 
        }
    }
}

์ •๋ฆฌ - ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ ์ง„ํ–‰ ์ˆœ์„œ

  1. try ๋ธ”๋ก ์‹คํ–‰์ด ์ค‘๋‹จ๋จ
  2. catch๋ธ”๋ก ์ค‘์— ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ธ”๋ก์ด ์žˆ๋Š”์ง€ ์ฐพ์Œ
    • ์œ„์—์„œ ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์ž„
    1. ์ฐพ์€ ๊ฒฝ์šฐ
      • ํ•ด๋‹น catch ๋ธ”๋ก ์•ˆ์˜ ์ฝ”๋“œ๋“ค์„ ์‹คํ–‰
      • finally ๋ธ”๋ก์„ ์‹คํ–‰
      • try ๋ธ”๋ก์ดํ›„์˜ ๋‹ค๋ฅธ ์ฝ”๋“œ๋“ค์ด ์‹คํ–‰๋จ
    2. ๋ชป์ฐพ์€ ๊ฒฝ์šฐ
      • finally๋ฅผ ๋ธ”๋ก์„ ์‹คํ–‰
      • ํ•œ ๋‹จ๊ณ„ ๋†’์€ try๋ธ”๋ก์œผ๋กœ ์ „๋‹ฌ

catch ๋ธ”๋ก์—์„œ ๋‹ค์‹œ ์˜ˆ์™ธ ๋˜์ง€๊ธฐ (rethrow)

try {
 
} catch (IOException e) {
    // ๋‚ด๊ฐ€ ์ฒ˜๋ฆฌ ์•ˆํ•˜๊ณ  ์œ„์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์–ด
    throw e;
 
} catch (Exception e) {
 
} finally {
 
}
  • ์˜ˆ์™ธ๋ฅผ ์žก๊ธดํ–ˆ๋Š”๋ฐ, ์ƒ์œ„์—์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ
  • ๋‹จ, ์ด๋•Œ call stack์ด ์œ ์ง€๋œ ์ƒํƒœ์—ฌ์•ผ ํ•จ
    • ๊ทธ๋ž˜์•ผ ์œ„์ชฝ์„ ์ฐพ์œผ๋Ÿฌ ๊ฐˆ ์ˆ˜ ์žˆ์ง€
    • ์œ„๋กœ ๋˜์ง€๋‹ค๊ฐ€ ํ˜ธ์ถœ ํŠธ๋ฆฌ๋ฅผ ์žƒ์–ด๋ฒ„๋ฆด ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ์Œ
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฑฐ ์ข‹์€ ์Šต๊ด€์€ ์•„๋‹˜
    • ํญํƒ„? ๋Œ๋ฆฌ๊ธฐ

Custom Exception

public final class UserNotFoundException extends RuntimeException {
    public UserNotFoundException() {
        super();
    }
 
    public UserNotFoundException(String message) {
        super(message);
    }
 
    public UserNotFoundException(String message, Throwable cause) {
        super(message, cause);
    }
}
  • class๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•จ
  • ์ƒ์† ๋ฐ›์•„์•ผ ํ•จ
  • super ํ˜ธ์ถœํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์•„ RuntimeException์—๋„ ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ›๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋ž€ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Œ
public static void main(String[] args) {
    db.findUser("wansik")
}
 
public User findUser(String username) {
    for (User user : users) {
        if (user.getUsername().equals(username)) {
            return user;
        }
    }
 
    throw new UserNotFoundException(username) // ์—๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋˜์ง
}
  • ๋ณดํ†ต์€ RuntimeException์„ ์ƒ์†ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•จ
  • ํ•˜์ง€๋งŒ C#๊ณผ ๊ฐ™์ด ๊ทธ๋ƒฅ Exception์„ ์ƒ์†ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•จ
    • ๋‚œ ์™œ ์ด๊ฒŒ ๋‚˜์•„๋ณด์ด์ง€
  • ๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ๋  ๊ฒฝ์šฐ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์ด ๋‹ฌ๋ผ์ง„๋‹ค๊ณ  ํ•œ๋‹ค.

์ž๋ฐ”์˜ ์˜ˆ์™ธ ๋ถ„๋ฅ˜

  • ๋‹ค๋ฅธ ์–ธ์–ด์˜ ์˜ˆ์™ธ์™€ ๋‹ค๋ฅธ์ ์ด ์žˆ๋Š”๋ฐ, ์˜ˆ์™ธ ๋ถ„๋ฅ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ
  • ์—ญ์‚ฌ์ ์ธ ์ด์œ , ์ •์‹ ์ ์ธ ์ด์œ 
  • ๋ฐฐ๊ฒฝ์„ ์•Œ์•„๋ณด์ž.

์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์น˜ํ•˜๋ฉด ์ผ์–ด๋‚˜๋Š” ์ผ (Java)

  • JVM ํ™˜๊ฒฝ์—์„œ ๋„๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ,
  • ์ „ํ˜€ ์ฒ˜๋ฆฌ(catch)ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.
public static void main() {
    program.divide(10, 0); // Exception in thread "main" java.lang.ArithmeticException: / by zero
}
 
public int divide(int num, int denom) {
    return num / denom;
}
  • main()๋ฉ”์„œ๋“œ๊นŒ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์•ˆํ•ด์ค„ ๊ฒฝ์šฐ JVM์ด ์˜ค๋ฅ˜๋ฅผ ๋„์šฐ๊ณ  ์ข…๋ฃŒ์‹œํ‚ด
  • ๊ฒฐ๊ตญ์€ JVM๊นŒ์ง€ ๊ฐ€์„œ ์ข…๋ฃŒ์‹œํ‚ค๊ธฐ์— OS๋‚˜ ๊ธฐ๊ณ„์—๋Š” ์•„๋ฌด ์˜ํ–ฅ์ด ์—†๋‹ค.
    • JVM์€ OS์œ„์— ๊ทธ๋ƒฅ ์„ค์น˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์น˜ํ•˜๋ฉด ์ผ์–ด๋‚˜๋Š” ์ผ (C)

  • ๊ทธ๋Ÿผ ๊ฐ€์ƒ ๋จธ์‹ ๋„ ์—†๊ณ  ์˜ˆ์™ธ๋„ ์—†๋Š” ์˜›๋‚  ์–ธ์–ด๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?
  • ์–ธ์ œ์  OS/๊ธฐ๊ณ„๋ฅผ ์“ฐ๋ƒ์— ๋”ฐ๋ผ ์ข€ ๋‹ค๋ฅด๋‹ค.

์•„์ฃผ ์˜›๋‚  ํ•˜๋“œ์›จ์–ด/OS

  • ํ•œ๋ฒˆ์— ํ”„๋กœ๊ทธ๋žจ ํ•˜๋‚˜๋งŒ ์‹คํ–‰๊ฐ€๋Šฅ
  • ๋”ฐ๋ผ์„œ ํ•˜๋“œ์›จ์–ด์— ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ๊ณต์œ ํ•œ๋‹ค!
  1. CPU์—์„œ 0์œผ๋กœ ๋‚˜๋ˆ„๋ ค ํ•จ
  2. CPU์˜ ALU(Arithmetic and Logical Unit)๋Š” ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ
  3. ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋ฉˆ์ถค (์ง„์งœ ํฌ๋ž˜์‹œ..)
  4. ๊ธฐ๊ณ„ ์žฌ๋ถ€ํŒ…ํ•ด์•ผ ํ•จ

์š”์ฆ˜์˜ ํ•˜๋“œ์›จ์–ด

  • ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์‹œ์— ์‹คํ–‰๋จ
  • ๋”ฐ๋ผ์„œ ๊ฐ ํ”„๋กœ๊ทธ๋žจ๋งˆ๋‹ค ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„(๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ)๋ฅผ ์ œ๊ณต
    • ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ๋Š” 8๊ธฐ๊ฐ€์ธ๋ฐ, ๊ฐ๊ฐ์˜ ํ”„๋กœ๊ทธ๋žจ ์—ญ์‹œ 8๊ธฐ๊ฐ€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ• ๋‹นํ•ด๋ฒ„๋ฆผ(๊ฐ€์ƒ)
    • ๊ทธ ๊ดด๋ฆฌ๋ฅผ ์šด์˜์ฒด์ œ์—์„œ ๋””์Šคํฌ์— ๋‘”๋‹ค๋˜๊ฐ€ ํ•˜๋Š” ๋กœ์ง์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•จ
  1. CPU์—์„œ 0์œผ๋กœ ๋‚˜๋ˆ„๋ ค ํ•จ
  2. CPU์˜ ALU(Arithmetic and Logical Unit)๋Š” ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ
  3. CPU์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ณด๋‚ด์คŒ
    • ์ด๊ฑธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌ์•ˆํ•ด์ฃผ๋ฉด ํฌ๋ž˜์‹œ๋‚  ์ˆ˜ ์žˆ์Œ
  4. OS๊ฐ€ ํ•ด๋‹น ์ƒํ™ฉ์„ ํŒŒ์•…ํ•œ๋’ค ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•˜๊ณ  ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œํ•จ
    • ์™ธ๋ถ€ ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ

Reference