카테고리 없음

2024. 7. 12. (금) 슈퍼코딩 부트캠프 Day 35 / 주특기 3주차

태영9922 2024. 7. 12. 12:31

 

1. Java Error와 Exception

  • 오류와 예외 차이 : 버그 발생 시 오류는 통제 불가능, 예외는 예외처리로 통제 가능
  • 오류 : 실행 컴퓨터 자체의 문제(CPU, Memory 등), JVM에서 기인한 문제(ex. Stack Overflow, Virtual Machine, Out of Memory Error 등)
  • 예외 : Check Exception(무조건 처리해야하는 예외) / Uncheck Exception(무조건 처리하지 않아도 되는 예외)
public class ErrorTest {
    public static void main(String[] args) {
        //VM 옵션 -Xmx1m ->
        //출력 : Error occurred during initialization of VM
        //      Too small maximum heap
        System.out.println("메인메소드 실행");
        System.out.println("메인메소드 실행2");
    }
}
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class ExceptionTest {
    public static void main(String[] args) throws FileNotFoundException {
        System.out.println("메인메소드가 시작합니다");
        makeCheckedException();
        System.out.println("메인메소드가 종료합니다");
    }

    public static void makeUncheckException() {
        int[] intArr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int index = 10;
        System.out.println(intArr[index]);
        //예외 발생 : ArrayIndexOutOfBoundsException
    }

    public static void makeCheckedException() throws FileNotFoundException {
        File file = new File("src/exercise/chapter_50/test.txt");
        FileInputStream fs = new FileInputStream(file);

        System.out.println("fs실행");
    }
}
 

2. Java try-catch문 다루기

  • try : 로직 진행
  • catch : 예외 발생 시 진행
  • 여러 catch문 실행 가능
package exercise.chapter_50;

public class TryCatchTest1 {
    public static void main(String[] args) {
        System.out.println("메인 메소드 실행");
        int i = 5;
        int j = 0;
        int data = 50 / i;
        System.out.println("data = " + data); //출력 : data = 10
        data = 50 / j;
        System.out.println("data = " + data); //ArithmeticException 발생 -> 프로그램 종료

        System.out.println("메인 메소드 종료");
    }
}
 
public class TryCatchTest1 {
    public static void main(String[] args) {
        System.out.println("메인 메소드 실행");
        try {

            int i = 0;
            int data = 50 / i;

            System.out.println("data = " + data); //ArithmeticException 발생
        } catch (ArithmeticException e) {
            System.out.println("0으로 나눌 수 없음");
            System.out.println("data = " + 0);
            e.printStackTrace(); //예외 내용 출력
        }//try-catch 수행시 바로 종료되는 것이 아니고 다음 로직 실행
        System.out.println("메인 메소드 종료");
    }
    //예외 발생하지 않으면 try 수행 후 catch문 다음 로직 실행
}
 
package exercise.chapter_50;

import java.util.ArrayList;
import java.util.List;

public class TryCatchTest2 {
    public static void main(String[] args) {
        System.out.println("메인메소드 실행");

        List<String> stringList = new ArrayList<>();
        stringList.add("Hello");
        stringList.add("World");
        stringList.add("Java");
        stringList.add(null);
        stringList.add("Python");

        //UncheckedException
        for (int i = 0; i < stringList.size() + 5; i++) { //IndexOutOfBoundsException 발생 가능
            try {
                System.out.println("i : " + i);
                String str = stringList.get(i);
                System.out.println(str.toUpperCase());
                //null add시 NullPointerException 발생 -> 비정상 종료
            } catch (NullPointerException e) {
                System.out.println("null은 넣을 수 없음");
            } catch (IndexOutOfBoundsException e) {
                System.out.println("index는 bound를 넘어갈수 없음");
                break;
            }
        }

        System.out.println("메인 메소드 종료");
    }
}
 
package exercise.chapter_50;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class TryCatchTest3 {
    public static void main(String[] args) {
        try {
            FileInputStream fs = new FileInputStream("src/exercise/chapter_50/test.txt");
            int i;
            while ((i = fs.read()) != -1) {
                System.out.write(i);
            }
        } catch (FileNotFoundException e) { //파일이 존재하지 않으면
            System.out.println("파일을 찾을 수 없습니다");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("입출력 과정에 오류");
            e.printStackTrace();
        }

    }
}
 

1. try-catch 한걸음 더

  • 다중예외처리
  • 여러 예외 한번에 잡기 ( | or 연산)
  • 상위 클래스 예외로 잡기
package exercise.chapter_51;

import java.io.FileInputStream;

public class TryMultiCatchTest {
    public static void main(String[] args) {
        try {
            FileInputStream fs = new FileInputStream("src/exercise/chapter_51/test.txt");

            int i = 1;
            int data = 100 / i;

            String str = "java";
            System.out.println(str.toUpperCase());

            int[] intArr = new int[10];
            System.out.println(intArr[9]);
        } catch (Exception e) { //모든 예외의 상위클래스
            System.out.println("최종 Exception");
            e.printStackTrace();
        }

        System.out.println("메인메소드 종료");

        //Exception 발생하면 catch문 실행 후 다음 예외처리는 넘어감
    }
}
 
  • try-catch-finally
package exercise.chapter_51;

public class TryCatchFinallyTest {
    public static void main(String[] args) {
        System.out.println("메인 실행");

        try {
            Integer myInt = 10;
            Integer data = 100 / myInt;
            if (data == 10) {
                return; //return 해도 finally는 무조건 실행
            }

            System.out.println("data : " + data);
        } catch (ArithmeticException e) {
            System.out.println("0으로 나눌 수 없음");
            e.printStackTrace();
        } finally {
            System.out.println("여기는 finally");
        }

        System.out.println("메인 종료");
    }
}
 
 
//finally로 리소스 해제
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FinallyCloseTest {
    public static void main(String[] args) throws InterruptedException, IOException {
        System.out.println("메인 실행");
        FileInputStream fs = null;
        try {
            fs = new FileInputStream("src/exercise/chapter_51/test.txt");
            int i;
            while ((i = fs.read()) != -1) {
                System.out.write(i);
            }
            int myInt = 10;
            int data = 100 / myInt;
            // fs.close(); //리소스 해제 꼭 필요
        } catch (FileNotFoundException e) { //파일이 존재하지 않으면
            System.out.println("파일을 찾을 수 없습니다");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("입출력 과정에 오류");
            e.printStackTrace();
        } catch (ArithmeticException e) {
            System.out.println("0으로 나눌 수 없음");
            e.printStackTrace();
        } finally {
            fs.close(); //finally에 걸려서 무조건 리소스 해제 
        }
        System.out.println("메인 종료");
    }
}
 
try (FileInputStream fs = new FileInputStream("src/exercise/chapter_51/test.txt")) {
..
}
//AutoClosable
 

 

#슈퍼코딩, #1:1관리형부트캠프, #백엔드, #backend, #백엔드공부, #개발공부, #백엔드개발자 #취준일기, #취준기록, #취뽀, #빡공, #HTML/CSS, #javascript, #react , #java, #spring