πŸ“ŒJava μ˜ˆμ™Έ 처리 & μ œλ„€λ¦­(Generic) 정리

My Pale Blue DotΒ·2025λ…„ 3μ›” 10일
0

JAVA

λͺ©λ‘ 보기
18/35
post-thumbnail

πŸ“… λ‚ μ§œ

2025-03-10


πŸ“ ν•™μŠ΅ λ‚΄μš©


1️⃣ μ˜ˆμ™Έ(Exception)λž€?

βœ… κ°œλ…

  • μ˜ˆμ™Έ(Exception) λŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 λ°œμƒν•˜λŠ” 비정상적인 상황을 μ˜λ―Έν•¨.
  • μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ΄ 비정상 μ’…λ£Œλ  수 있기 λ•Œλ¬Έμ— 이λ₯Ό 적절히 μ²˜λ¦¬ν•΄μ•Ό 함.
  • μ˜ˆμ™Έ μ²˜λ¦¬λŠ” try-catch, throws, throw 등을 ν™œμš©ν•˜μ—¬ κ΅¬ν˜„ν•¨.

βœ… μ˜ˆμ™Έμ˜ μ’…λ₯˜

μ˜ˆμ™Έ μœ ν˜•μ„€λͺ…μ˜ˆμ œ
Checked Exception컴파일 νƒ€μž„μ— μ²΄ν¬λ˜λŠ” μ˜ˆμ™ΈIOException, SQLException
Unchecked ExceptionλŸ°νƒ€μž„(μ‹€ν–‰ 쀑) λ°œμƒν•˜λŠ” μ˜ˆμ™ΈNullPointerException, ArrayIndexOutOfBoundsException
μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έμ§μ ‘ μ •μ˜ν•œ μ˜ˆμ™Έ 클래슀class MyException extends Exception {}

2️⃣ μ˜ˆμ™Έ 처리 방법

βœ… 1. try-catch 블둝 μ‚¬μš©

public class ExceptionHandling {
    public static void main(String[] args) {
        try {
            int num = 10 / 0; // 0으둜 λ‚˜λˆ„κΈ° μ‹œλ„ (μ˜ˆμ™Έ λ°œμƒ)
        } catch (ArithmeticException e) { // μ˜ˆμ™Έ 처리
            System.out.println("μ˜ˆμ™Έ λ°œμƒ: " + e.getMessage());
        } finally {
            System.out.println("μ˜ˆμ™Έ 처리 ν›„ μ‹€ν–‰λ˜λŠ” finally 블둝");
        }
    }
}

πŸ”Ή 좜λ ₯ κ²°κ³Ό

μ˜ˆμ™Έ λ°œμƒ: / by zero
μ˜ˆμ™Έ 처리 ν›„ μ‹€ν–‰λ˜λŠ” finally 블둝

πŸ’‘ finally 블둝은 μ˜ˆμ™Έ λ°œμƒ 여뢀와 상관없이 싀행됨!


βœ… 2. throws ν‚€μ›Œλ“œ μ‚¬μš© (μ˜ˆμ™Έ λ– λ„˜κΈ°κΈ°)

import java.io.*;

public class ThrowsExample {
    public static void readFile() throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("test.txt"));
        System.out.println(br.readLine());
        br.close();
    }

    public static void main(String[] args) {
        try {
            readFile();
        } catch (IOException e) {
            System.out.println("파일 읽기 쀑 μ˜ˆμ™Έ λ°œμƒ: " + e.getMessage());
        }
    }
}

πŸ’‘ throwsλŠ” λ©”μ„œλ“œκ°€ μ˜ˆμ™Έλ₯Ό 직접 μ²˜λ¦¬ν•˜μ§€ μ•Šκ³  ν˜ΈμΆœν•œ 곳으둜 λ„˜κΉ€!


βœ… 3. μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έ(Custom Exception)

class MyException extends Exception { // μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έ 클래슀
    public MyException(String message) {
        super(message);
    }
}

public class CustomExceptionExample {
    public static void main(String[] args) {
        try {
            throw new MyException("μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έ λ°œμƒ!");
        } catch (MyException e) {
            System.out.println("μ˜ˆμ™Έ λ°œμƒ: " + e.getMessage());
        }
    }
}

πŸ”Ή 좜λ ₯ κ²°κ³Ό

μ˜ˆμ™Έ λ°œμƒ: μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έ λ°œμƒ!

πŸ’‘ νŠΉμ • μƒν™©μ—μ„œ 직접 μ˜ˆμ™Έλ₯Ό μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•  수 있음!


3️⃣ μ œλ„€λ¦­(Generic)μ΄λž€?

βœ… κ°œλ…

  • μ œλ„€λ¦­(Generic) 은 ν΄λž˜μŠ€λ‚˜ λ©”μ„œλ“œμ—μ„œ νƒ€μž…μ„ μΌλ°˜ν™”ν•˜μ—¬ μ—¬λŸ¬ νƒ€μž…μ„ 지원할 수 μžˆλ„λ‘ ν•˜λŠ” κΈ°λŠ₯.
  • 컴파일 νƒ€μž„μ— νƒ€μž…μ„ μ²΄ν¬ν•˜μ—¬ μ•ˆμ „ν•œ μ½”λ“œ μž‘μ„±μ΄ κ°€λŠ₯ν•˜λ©°, μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높일 수 있음.

βœ… μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λŠ” 이유

  1. νƒ€μž… μ•ˆμ •μ„± 보μž₯ β†’ 컴파일 λ‹¨κ³„μ—μ„œ νƒ€μž… 였λ₯˜ λ°©μ§€.
  2. ν˜• λ³€ν™˜ λΆˆν•„μš” β†’ λΆˆν•„μš”ν•œ Object ν˜•λ³€ν™˜ 제거.
  3. μ½”λ“œ μž¬μ‚¬μš© κ°€λŠ₯ β†’ λ‹€μ–‘ν•œ νƒ€μž…μ„ ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ—μ„œ 처리 κ°€λŠ₯.

4️⃣ μ œλ„€λ¦­(Generic) μ‚¬μš© 방법

βœ… 1. μ œλ„€λ¦­ 클래슀 예제

package ch16;

// μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜μ—¬ λ‹€μ–‘ν•œ νƒ€μž…μ„ μ²˜λ¦¬ν•  수 μžˆλŠ” 클래슀
class Box<T> {
    private T item;

    public Box(T item) {
        this.item = item;
    }

    public T getItem() {
        return item;
    }

    @Override
    public String toString() {
        return "Box contains: " + item;
    }
}

public class GenericExample {
    public static void main(String[] args) {
        Box<String> stringBox = new Box<>("Hello"); // String νƒ€μž… μ‚¬μš©
        Box<Integer> intBox = new Box<>(123); // Integer νƒ€μž… μ‚¬μš©

        System.out.println(stringBox);
        System.out.println(intBox);
    }
}

πŸ”Ή 좜λ ₯ κ²°κ³Ό

Box contains: Hello
Box contains: 123

πŸ’‘ μ œλ„€λ¦­μ„ ν™œμš©ν•˜λ©΄ λ‹€μ–‘ν•œ 데이터 νƒ€μž…μ„ ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ—μ„œ μ²˜λ¦¬ν•  수 있음!


βœ… 2. νŠΉμ • νƒ€μž…λ§Œ ν—ˆμš©ν•˜λŠ” μ œλ„€λ¦­

package ch16;

// νŠΉμ • μƒμœ„ 클래슀λ₯Ό 상속받은 클래슀만 ν—ˆμš©ν•˜λŠ” μ œλ„€λ¦­
class Fruit {}

class Apple extends Fruit {
    @Override
    public String toString() {
        return "Apple";
    }
}

class Banana extends Fruit {
    @Override
    public String toString() {
        return "Banana";
    }
}

// TλŠ” Fruit을 상속받은 클래슀만 κ°€λŠ₯
class FruitBox<T extends Fruit> {
    private T fruit;

    public FruitBox(T fruit) {
        this.fruit = fruit;
    }

    @Override
    public String toString() {
        return "FruitBox contains: " + fruit;
    }
}

public class GenericBoundExample {
    public static void main(String[] args) {
        FruitBox<Apple> appleBox = new FruitBox<>(new Apple());
        FruitBox<Banana> bananaBox = new FruitBox<>(new Banana());

        System.out.println(appleBox);
        System.out.println(bananaBox);
    }
}

πŸ”Ή 좜λ ₯ κ²°κ³Ό

FruitBox contains: Apple
FruitBox contains: Banana

πŸ’‘ μ œλ„€λ¦­μ— extendsλ₯Ό μ‚¬μš©ν•˜λ©΄ νŠΉμ • νƒ€μž…λ§Œ ν—ˆμš©ν•  수 있음!


πŸ”₯ 정리

  1. μ˜ˆμ™Έ(Exception) λŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 λ°œμƒν•˜λŠ” 였λ₯˜λ₯Ό μ˜λ―Έν•˜λ©°, μ μ ˆν•œ μ˜ˆμ™Έ μ²˜λ¦¬κ°€ ν•„μš”ν•¨.
  2. try-catch-finallyλ₯Ό μ‚¬μš©ν•˜μ—¬ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•  수 있으며, throw와 throwsλ₯Ό ν™œμš©ν•˜μ—¬ μ˜ˆμ™Έλ₯Ό 던질 μˆ˜λ„ 있음.
  3. μ œλ„€λ¦­(Generic)을 μ‚¬μš©ν•˜λ©΄ νƒ€μž…μ„ μΌλ°˜ν™”ν•˜μ—¬ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높일 수 있음.
  4. extendsλ₯Ό ν™œμš©ν•˜μ—¬ νŠΉμ • 클래슀만 μ œλ„€λ¦­ νƒ€μž…μœΌλ‘œ ν—ˆμš©ν•  μˆ˜λ„ 있음.

πŸ”— μ°Έκ³  자료


profile
Here, My Pale Blue.🌏

0개의 λŒ“κΈ€