
블로그 작성법
목표 > 공부한 내용 > 얻었고, 앞으로 이걸 해봐야지 적기
프로그램 실행 중 나타나는 오류 (개발자가 예상하지 못한 오류)
ex. 나이에 음수를 넣는다던가, 이름에 숫자를 넣는다던가...
=> "유효성 검사"
다음 화면으로 못 넘어갈 에러들
(SQL, Null, Index, ...)

Checked Exception / Unchecked Exception
실행 버튼 누르면 걸려요 / 구동 중 걸려요.
반드시 처리 해야함 / 처리 개발자 마음
컴파일러가 체크를 했냐 안했냐로 나뉜다.
컴파일러가 체크 / un체크 여부
ex. NullPointerException : Unchecked Exception
cf. 이름이 Null Pointer인 이유: 참조 자료형, 객체 주소 가리킴
예외처리는 프로젝트의 완성도 에 영향을 미친다.

catch 부분에서 모든 예외를 처리하기 위해, 상위 예외 클래스인
Exception을 넣어서 처리해줄 수 있다.
Object 클래스
String str = null;
if(str != null) {
System.out.println(str.charAt(0));
}
try {
// 예외가 발생할 것 같은 부분
} catch(예외클래스 e) {
// 예외 발생시 처리 부분
}
실행순서
1) try 구문 순서 실행
2) 예외 만나면 => JVM이 예외가 터진 지점, 이유
=> 예외 객체 => catch 호출하면서 매개변수로 넣어줘요.
Exception 처리방법
1. 실행 시켜본다.
2. 예외가 발생한다. -> 예외 발생 클래스명을 컴파일러가 알려준다.
3. 예외가 발생한 코드를 try - catch로 묶어준다.
4. catch에서 예외 객체.toString으로 예외 객체를 출력해본다.
5. catch에 상세 예외 클래스 를 명시한다.
상세 예외 클래스를 명시하는 이유는
try 안에서 몇 개의 예외가 발생하는지 알 수 없기에, 예외를 분기하여 처리하기 위해서이다.
다음과 같은 예외들이 발생할 때는 아래와 같은 방법을 해결할 수 있다.
1. 배열의 인덱스 값이 넘어섰을 때
2. Input으로 다른 타입의 값이 입력될 때
try {
Scanner scanner = new Scanner(System.in);
int cardIdx = scanner.nextInt();
int[] arr = {1,2,3,4,5,6};
System.out.println("뽑은 카드 번호는 : ", cardIdx);
System.out.println("뽑은 카드에 적힌 숫자는 : ", arr[cardIdx]);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("그거 없는 번호야");
} catch(InputMismatchException e) {
System.out.println("숫자만 입력하라고..");
}
다음과 같은 상황에 예외를 잡는 부분을 어디로 해야할까?
public static void main(String[] args) {
int result = divide(10, 0);
}
public static void divide(int x, int y) {
return x / y;
}
답은 에러가 발생하는 연산에다가 try - catch를 해줘야 한다.
public static void main(String[] args) {
// 여기서 예외 처리하는게 아니라
int result = divide(10, 0);
}
public static int divide(int x, int y) {
// 이 로직에서 에러가 발생하기에
// 여기서 에러를 처리해줘야 한다.
int result = 0;
try{
result = x / y;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없다.");
System.out.println(e.toString());
}
return result;
}
A.
예외를 발생시키는 메소드가 책임을 지는 것이 맞다고 생각함.
(이 메소드 안에서 try catch로 잡는 것)
이러한 질문으로 인해 throws가 등장하였다.
throws는 날 호출한 놈이 날 책임 져야지
예외가 발생하는 연산이 포함된 메소드를 호출한 위치로 예외 처리를 전가하는 것!
throws를 통해서 발생하는 예외 객체

여기서 intellJ로 설정하면, gradle 대신 intellJ의 현재 class 파일의 main method가 실행된다.
Entity = 객체(Object)
cf. JPA Entity
ctrl + n 으로 검색 가능하다.ctrl + shift f로도 검색 가능하다.Shift + shift로도 검색 가능하다.ResponseEntity

같은 이름의 생성자로 여러 기능을 하도록 오버로딩을 많이 사용한다.
Controller에서 요청에 대해 ResponseEntity 타입으로 반환할 수 있다.
HttpStatus 정리 자료
https://sirobako.co.kr/detail/166
프로그램의 안정성을 위해서 최대한 많은 테스트 진행과 예외처리를 진행할 것 이다. 많은 예외처리 클래스에 대해 공부해보고 이를 내 프로젝트에 적용해보자.