πŸ€ Java/μžλ°”μ™„μ „μ •λ³΅

[Java] 일반 μ˜ˆμ™Έμ™€ μ‹€ν–‰ μ˜ˆμ™Έ

._.sori 2025. 5. 8. 16:03

 

 

πŸ“š μ°Έκ³ ν•œ μ±…

 

: 좜처 예슀24 ν™ˆνŽ˜μ΄μ§€

 

 

 

- 기본적인 κ°œλ…μ„ μ •λ¦¬ν•˜κ³  μΆ”κ°€μ μœΌλ‘œ κΆκΈˆν•œ 것듀을 μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€ -

 

 

πŸ₯ πŸ₯ πŸ₯

 


 

βœ”οΈ   μ˜ˆμ™Έ_ 457p

 

 μ˜ˆμ™Έ

: μ—°μ‚° 였λ₯˜, 숫자 포맷 였λ₯˜ λ“±κ³Ό 같이 상황에 따라 κ°œλ°œμžκ°€ ν•΄κ²°ν•  수 μžˆλŠ” 였λ₯˜λ₯Ό μ˜λ―Έν•œλ‹€.

 

 μ—λŸ¬

: μžλ°” 가상 λ¨Έμ‹  μžμ²΄μ—μ„œ λ°œμƒν•˜λŠ” 였λ₯˜λ‘œ 개발자 ν•΄κ²°ν•  수 μ—†λŠ” 였λ₯˜λ₯Ό μ˜λ―Έν•œλ‹€.

 

 

μ˜ˆμ™ΈλŠ” κ°œλ°œμžκ°€ ν•΄κ²°ν•  수 μžˆλŠ” 였λ₯˜λ₯Ό λ§ν•œλ‹€κ³  ν–ˆλŠ”λ°, μ΄λ•Œ 였λ₯˜λ₯Ό μˆ˜μ •ν•΄μ„œ ν•΄κ²°ν•˜λŠ” 것이 μ•„λ‹Œ 였λ₯˜κ°€ λ°œμƒν–ˆμ„ λ•Œ 차선책을 μ„ νƒν•˜λŠ” 것을 λ§ν•œλ‹€.μ—λŸ¬λŠ” μ•„μ˜ˆ 처리자체λ₯Ό ν•  수 μ—†λŠ” 였λ₯˜μΈ λΈ”λ£¨μŠ€ν¬λ¦° 같은 것을 λ§ν•œλ‹€.

μžλ°”μ—μ„œ μ˜ˆμ™Έμ˜ μ΅œμƒμœ„ ν΄λž˜μŠ€λŠ” Exception 클래슀고, μ—λŸ¬μ˜ μ΅œμƒμœ„ ν΄λž˜μŠ€λŠ” Error ν΄λž˜μŠ€λ‹€. 이 두 개의 ν΄λž˜μŠ€λŠ” Throwable 클래슀λ₯Ό μƒμ†ν•œλ‹€. λ”°λΌμ„œ μ—λŸ¬μ™€ μ˜ˆμ™Έ λͺ¨λ‘ Throwable 클래슀의 λͺ¨λ“  κΈ°λŠ₯을 ν¬ν•¨ν•œλ‹€. 

 

 

 

 


 

 

 

βœ”οΈ   일반 μ˜ˆμ™Έ_ 458p

 

 μΌλ°˜ μ˜ˆμ™Έ

: 컴파일 전에 μ˜ˆμ™Έ λ°œμƒ 문법을 κ²€μ‚¬ν•˜λ©° μ˜ˆμ™Έ 처리λ₯Ό ν•˜μ§€ μ•ŠμœΌλ©΄ 문법 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ 컴파일이 λΆˆκ°€ν•˜λ‹€.

 

• InterruptedException

: 일정 μ‹œκ°„ λ™μ•ˆ ν•΄λ‹Ή μ“°λ ˆλ“œλ₯Ό λ©ˆμΆ”κ²Œ λ§Œλ“ λ‹€.

 Thread thread = new Thread(() -> {
            try {
                System.out.println("μž‘μ—… μ‹œμž‘: 5초 λŒ€κΈ° 쀑");
                Thread.sleep(5000);  // 5초 λŒ€κΈ°
                System.out.println("μž‘μ—… μ™„λ£Œ");
            } catch (InterruptedException e) {
                System.out.println("μŠ€λ ˆλ“œκ°€ μΈν„°λŸ½νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.");
            }
        });
μ“°λ ˆλ“œλŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ³Όμ •μ—μ„œ CPUλ₯Ό μ‚¬μš©ν•˜λŠ” μ΅œμ†Œ λ‹¨μœ„λ‘œ, ν”„λ‘œμ„ΈμŠ€ 내에 μ‘΄μž¬ν•œλ‹€. 즉, 일반적으둜 μžλ°” ν”„λ‘œκ·Έλž¨μ€ μ»€λ‹€λž€ ν•˜λ‚˜μ˜ μž‘μ—…μ„ μž‘μ€ μž‘μ—…λ“€λ‘œ λ‚˜λˆ„μ–΄ 각각 μ“°λ ˆλ“œμ— ν• λ‹Ήν•œ ν›„ μ‹€ν–‰λœλ‹€. λ™μ‹œμ— μ—¬λŸ¬ μ“°λ ˆλ“œκ°€ μ‹€ν–‰λ˜λ‹ˆ 전체 μž‘μ—…μ„ 빨리 끝낼 수 μžˆλ„λ‘ ν•΄μ€€λ‹€.

μ‚¬μš©μžκ°€ 전체 μž‘μ—…μ„ μ·¨μ†Œν•˜μ—¬ μ’…λ£Œν•΄μ•Όν•  경우, μ“°λ ˆλ“œκ°€ μ’…λ£Œν•  λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬λŠ” 것이 μ•„λ‹Œ μž‘μ—…μ΄ 더이상 ν•„μš”ν•˜μ§€ μ•ŠμœΌλ‹ˆ 싀행을 κ·Έλ§Œλ‘κ³  λ¦¬μ†ŒμŠ€λ“€μ„ μ •λ¦¬ν•œ ν›„ μ’…λ£Œν•˜λ„λ‘ μ•Œλ¦°λ‹€. μ΄λ•Œ μΈν„°λŸ½νŠΈκ°€ μ‚¬μš©λœλ‹€.

μ΄λ•Œ λ§Œμ•½ μ“°λ ˆλ“œκ°€ μ–΄λ”˜κ°„μ— λΈ”λ‘œν‚Ή λ˜μ–΄μžˆλ‹€λ©΄ μΈν„°λŸ½νŠΈλ₯Ό μ²΄ν¬ν•˜κ³  μ’…λ£Œ λ‘œμ§μ„ 넣어놨어도 μΈν„°λŸ½νŠΈ 둜직 싀행은 μ˜μ›νžˆ μ‹€ν–‰λ˜μ§€ μ•Šμ„ 수 μžˆλ‹€. 그렇기에 sleepμ—μ„œ λ²—μ–΄λ‚˜ μΈν„°λŸ½νŠΈ 둜직이 싀행될 수 μžˆλ„λ‘ ν•΄μ•Όν•˜λŠ”λ° Interrupted Exception을 try-catchλ₯Ό μ΄μš©ν•˜μ—¬ μ²˜λ¦¬ν•˜κ±°λ‚˜ λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜μ— λͺ…μ‹œν•΄μ„œ λ©”μ„œλ“œ ν˜ΈμΆœμžμ—κ²Œ 처리λ₯Ό μœ„μž„ν•΄μ•Όν•œλ‹€.

μ—¬κΈ°μ„œ μ€‘μš”ν•œ 것은 Interrupted Exception은 λ°˜λ“œμ‹œ μ μ ˆν•˜κ²Œ μ²˜λ¦¬ν•΄μ•Όν•œλ‹€λŠ” 것이닀. λ§Œμ•½ Interrupted Exception을 λ¬΄μ‹œν•˜λŠ” μ½”λ“œκ°€ μ—¬κΈ°μ €κΈ° λ‚¨λ°œν•œλ‹€λ©΄ 싀행이 μ’…λ£Œλ˜μ§€ μ•Šκ³  kill-9둜 κ°•μ œ μ’…λ£Œν•΄μ•Όν•œλ‹€.

 

 

[Java] InterruptedExceptionμ΄λž€?

μžλ°”λ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ κ°€μž₯ 많이 κ³ λ €λ˜μ–΄μ•Ό ν•˜λŠ” μ˜ˆμ™Έ 쀑 ν•˜λ‚˜κ°€ InterruptedException이닀. μŠ€λ ˆλ“œμ˜ 싀행을 잠깐 λ™μ•ˆ λ©ˆμΆ”κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” sleep μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄μž try { Thread.sleep(1000); } catch (Inter

hbase.tistory.com

 

 


• ClassNotFoundException

: JVM이 클래슀 이름을 λ¬Έμžμ—΄λ‘œ λ°›μ•„μ„œ λ‘œλ”©ν•˜λ €κ³  ν•  λ•Œ, ν•΄λ‹Ή ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ•„ μ°Ύμ§€ λͺ»ν•˜λŠ” 경우 λ°œμƒν•œλ‹€.

public class ClassNotFoundExample {
    public static void main(String[] args) {
        try {
            Class.forName("com.example.NotExistClass");
        } catch (ClassNotFoundException e) {
            System.out.println("클래슀λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€: " + e.getMessage());
        }
    }
}
Class.forName("클래슀λͺ…")을 μ‚¬μš©ν•  λ•Œ 주둜 λ°œμƒν•˜λŠ” μ˜ˆμ™Έλ‹€. ClassNotFoundExceptionλŠ” checked Exception이라 λ°˜λ“œμ‹œ try-catch둜 μ²˜λ¦¬ν•΄μ•Ό ν•œλ‹€.

 

 

 

• IOException

: μžλ°” μž…μΆœλ ₯μ—μ„œ 주둜 λ³΄μ΄λŠ” 일반 μ˜ˆμ™Έλ‘œ, μ½˜μ†”μ΄λ‚˜ νŒŒμΌμ— 데이터λ₯Ό μ“°κ±°λ‚˜ 읽을 λ•Œ λ°œμƒν•œλ‹€.

    try {
            BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
            String line = reader.readLine();
            System.out.println("파일 λ‚΄μš©: " + line);
            reader.close();
        } catch (IOException e) {
            System.out.println("νŒŒμΌμ„ μ½λŠ” 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: " + e.getMessage());
        }
FileReader와 BufferedReaderλ₯Ό μ΄μš©ν•˜μ—¬ test.txt 파일의 첫 쀄을 μ½λŠ”λ‹€. 파일이 μ‘΄μž¬ν•˜μ§€ μ•Šκ±°λ‚˜ μ½λŠ” 쀑 λ¬Έμ œκ°€ 생기면
IOException이 λ°œμƒν•œλ‹€. μ œλŒ€λ‘œ 싀행을 ν•˜κ³ μž μ›ν•œλ‹€λ©΄ 같은 폴더에 test.txt 파일이 μ œλŒ€λ‘œ μ‘΄μž¬ν•˜λŠ”μ§€ 확인을 ν•΄μ•Όν•œλ‹€. 

 

 

 

• FileNotFoundException

: IOException의 ν•˜μœ„ 클래슀이며, νŒŒμΌμ„ 읽을 λ•Œ ν•΄λ‹Ή κ²½λ‘œμ— 파일이 μ—†κ±°λ‚˜ μ“°κΈ° κΆŒν•œμ΄ μ—†λŠ” νŒŒμΌμ— μ ‘κ·Όν•˜λ €κ³  ν•  λ•Œ λ°œμƒν•œλ‹€.

  try {
            FileInputStream fis = new FileInputStream("test.txt");
        } catch (FileNotFoundException e) {
            System.out.println("νŒŒμΌμ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€: " + e.getMessage());
        }
test.txt 파일이 μ—†λŠ” 경우 λ°œμƒν•œλ‹€.

 

 

 

• CloneNotSupportedException

: Cloneable μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†ν•˜μ§€ μ•Šμ€ 클래슀의 객체λ₯Ό λ³΅μ‚¬ν•˜κΈ° μœ„ν•΄ clone( ) λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ λ°œμƒν•œλ‹€.

class Person implements Cloneable {
    String name;

    Person(String name) {
        this.name = name;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class CloneExample {
    public static void main(String[] args) {
        Person person1 = new Person("Alice");

        try {
            Person person2 = (Person) person1.clone();
            System.out.println("볡제 성곡");
        } catch (CloneNotSupportedException e) {
            System.out.println("λ³΅μ œν•  수 μ—†μŠ΅λ‹ˆλ‹€: " + e.getMessage());
        }
    }
}
Object 클래슀의 λ©”μ„œλ“œ 쀑 clone( )은 μžμ‹ μ˜ 객체λ₯Ό λ³΅μ‚¬ν•œ 클둠 객체λ₯Ό 생성해 λ¦¬ν„΄ν•˜λŠ” λ©”μ„œλ“œλ‘œ λ°˜λ“œμ‹œ Cloneable μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†ν•΄μ•Όν•œλ‹€.

clone λ©”μ„œλ“œλŠ” Java의 μ΅œμƒμœ„ 클래슀인 java.lang.Object ν΄λž˜μŠ€μ—μ„œ μ •μ˜λœ λ©”μ„œλ“œλ‘œ κ·Έ μ•ˆμ— protected둜 μ •μ˜λ˜μ–΄ μžˆλ‹€. ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ super.clone( )을 ν˜ΈμΆœν•΄μ•Ό λ³΅μ œλœλ‹€. λ§Œμ•½ clone λ©”μ„œλ“œλ₯Ό μ™ΈλΆ€μ—μ„œ μ‚¬μš©ν•˜λ €λ©΄ protected -> public으둜 μ˜€λ²„λΌμ΄λ”©ν•΄μ•Ό ν•œλ‹€.

 

 

 

 


 

 

 

βœ”οΈ   μ‹€ν–‰ μ˜ˆμ™Έ_ 463p

 μ‹€ν–‰ μ˜ˆμ™Έ

: 컴파일 전이 μ•„λ‹Œ μ‹€ν–‰ν•  λ•Œ λ°œμƒν•˜λŠ” μ˜ˆμ™Έλ‘œ, μ˜ˆμ™Έ 처리λ₯Ό λ”°λ‘œ ν•˜μ§€ μ•Šλ”λΌλ„ 문법 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šκ³  ν”„λ‘œκ·Έλž¨μ΄ κ°•μ œ μ’…λ£Œλœλ‹€.

 

ArithmeticException

: μ—°μ‚° μžμ²΄κ°€ λΆˆκ°€λŠ₯ν•  λ•Œ λ°œμƒν•œλ‹€.

        try {
            int a = 10;
            int b = 0;
            int result = a / b; 
            System.out.println("κ²°κ³Ό: " + result);
        } catch (ArithmeticException e) {
            System.out.println("μ‚°μˆ  였λ₯˜ λ°œμƒ: " + e.getMessage());
        }
μœ„μ˜ μ½”λ“œλŠ” λΆ„λͺ¨κ°€ 0인 경우둜 연산이 λΆˆκ°€ν•˜μ—¬ μ˜ˆμ™Έκ°€ λ°œμƒν•œ κ²½μš°μ΄λ‹€. λ§Œμ•½ μ΄λ ‡κ²Œ 였λ₯˜κ°€ λ°œμƒν–ˆμ„ 경우λ₯Ό λŒ€λΉ„ν•΄ result 값이 -1 ν˜Ήμ€ 1000 λ“±μ˜ 값을 넣은 μ½”λ“œλ₯Ό try-catch둜 감싸 ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜μ§€ μ•Šλ„λ‘ λ§‰μœΌλ©΄μ„œ κ²°κ³Ό 값을 보고 μ—°μ‚° μ½”λ“œμ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆμŒμ„ λ°œκ²¬ν•œλ‹€.

 

 

 

ClassCastException

: 상속 관계에 μžˆλŠ” 클래슀 κ°„μ˜ λ‹€μš΄ μΊμŠ€νŒ…μ΄ λΆˆκ°€λŠ₯ν•  λ•Œ,  λ‹€μš΄μΊμŠ€νŒ…μ„ μ‹œλ„ν•˜λ©΄ λ°œμƒν•˜κ±°λ‚˜ 잘λͺ»λœ ν˜•λ³€ν™˜μ„ ν•˜λ©΄ λ°œμƒν•œλ‹€.

        Object obj = "λ‚˜λŠ” λ¬Έμžμ—΄μž…λ‹ˆλ‹€";  // String 객체

        try {
            Integer num = (Integer) obj;  // 잘λͺ»λœ ν˜•λ³€ν™˜
        } catch (ClassCastException e) {
            System.out.println("ν˜•λ³€ν™˜ 였λ₯˜ λ°œμƒ: " + e.getMessage());
        }
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}

public class CastExample {
    public static void main(String[] args) {
        Animal animal = new Cat();  // μ‹€μ œ κ°μ²΄λŠ” Cat

        try {
            Dog dog = (Dog) animal;  // 잘λͺ»λœ λ‹€μš΄μΊμŠ€νŒ…
        } catch (ClassCastException e) {
            System.out.println("ν˜•λ³€ν™˜ 였λ₯˜: " + e.getMessage());
        }
    }
}

 

 

 

ArrayIndexOutOfBoundException

: λ°°μ—΄μ˜ 인덱슀λ₯Ό 잘λͺ» μ‚¬μš©ν–ˆμ„ λ•Œ λ°œμƒν•œλ‹€.

        int[] numbers = {10, 20, 30};

        try {
            System.out.println(numbers[3]); // 인덱슀 3은 μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("λ°°μ—΄ 인덱슀 였λ₯˜ λ°œμƒ: " + e.getMessage());
        }

 

 

 

NumberFormatException

: λ¬Έμžμ—΄μ„ 숫자 λ˜λŠ” μ‹€μˆ˜λ‘œ λ³€ν™˜ν•  λ•Œ λ¬Έμžμ—΄μ΄ λ³€ν™˜ν•˜κ³ μž ν•˜λŠ” 숫자 ν˜•μ‹μ΄ μ•„λ‹ˆλ©΄ λ³€ν™˜μ΄ μ‹€νŒ¨ν•˜λŠ”λ° μ΄λ•Œ λ°œμƒν•œλ‹€.

        String input = "123ABC";  // μˆ«μžκ°€ μ•„λ‹Œ λ¬Έμžκ°€ ν¬ν•¨λœ λ¬Έμžμ—΄

        try {
            int number = Integer.parseInt(input);  // μ˜ˆμ™Έ λ°œμƒ
            System.out.println("λ³€ν™˜λœ 숫자: " + number);
        } catch (NumberFormatException e) {
            System.out.println("숫자 ν˜•μ‹ 였λ₯˜: " + e.getMessage());
        }

 

 

 

NullPointerException

: μ°Έμ‘° λ³€μˆ˜κ°€ μ‹€μ œ 객체λ₯Ό 가리킀고 μžˆμ§€ μ•Šμ€ μƒν™©μ—μ„œ ν•„λ“œλ‚˜ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ λ°œμƒν•œλ‹€.

        String text = null;  // λ¬Έμžμ—΄ λ³€μˆ˜μ— null ν• λ‹Ή

        try {
            System.out.println("λ¬Έμžμ—΄ 길이: " + text.length());  // μ˜ˆμ™Έ λ°œμƒ
        } catch (NullPointerException e) {
            System.out.println("널 포인터 μ˜ˆμ™Έ λ°œμƒ: " + e.getMessage());
        }
μœ„μ˜ μ½”λ“œμ—μ„œ textλŠ” null 값이닀. null은 μœ„μΉ«κ°’μ„ μ €μž₯ν•˜λŠ” μ°Έμ‘° λ³€μˆ˜μ˜ μ΄ˆκΉƒκ°’μœΌλ‘œλ§Œ μ‚¬μš©ν•  수 있으며, ν˜„μž¬ 가리킀고 μžˆλŠ” 객체가 μ—†λ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.