[24.04.26] 내일배움캠프 10일차 JAVA TIL - 객체지향 프로그래밍

2024. 4. 26. 20:19T.I.L

오늘 한 일

  • 4주차 강의 수강
  • Java 개인 과제 Lv.1
  • 알고리즘 DP공부

 


수기를 남기기에 앞서 교육 내용이 많아, 평소 헷갈렸던 개념 위주로 T.I.L을 작성했다.

 

오늘은 예외 처리, 제네릭에 대해 배웠다.

프로그램에서 문제가 발생했을 때, 문제를 크게 2가지로 나눌 수 있다.

 
              문제

                 - 오류(Error) : 회복이 불가능한 문제 
                 - 예외(Exception) : 회복이 가능한 문제로, 예외 처리 대상이 된다. 

즉, 우리가 깊게 팔 부분은 예외가 발생했을 때이다.

 


               예외(Exception)의 종류
                  컴파일 에러 (Checked Exception) : 코드에 오탈자나 접근 범위를 헷갈린 경우 발생하기 쉽다
                  런타임 에러 (Unchecked Exception) : "프로그램" 실행 도중에 발생하는 예외

 

예외 처리는 크게 3가지 절차로 나뉩니다.

일단 , 예외가 있어야 처리를 할 수 있겠죠?

예외 정의 -> 예외 발생 알림 -> 예외 핸들링

 

 

사전에 Exception class로 에러를 정의해야 합니다. (예제를 들기 위해 클래스를 만들었지만, 기본 클래스를 사용해도 됩니다.)

class OurBadException extends Exception {
	public OurBadException() {
		super("위험한 행동을 하면 예외처리를 꼭 해야합니다!");
	}
}

 

그리고 다른 클래스에서 임의로 오류가 존재한다고 가정하고 (just를 오류 여부로 봅시다)

오류가 발생했을때 던져줄 클래스를 throws로 덧붙여줍니다. 상속의 개념과 유사하다고 보면 됩니다. 이후, 오류가 발생하였을 시 throw로 실제 예외 객체를 던져줍니다!

class OurClass {
    private final Boolean just = true;
		
		// 신규 문법 throws!
    public void thisMethodIsDangerous() throws OurBadException {
        if (just) {
						// 신규 문법 throw!
            throw new OurBadException();
        }
    }
}

 

 

예외 처리 예제 ( main문에서 사용하기 )

public class StudyException {
    public static void main(String[] args) {
        OurClass ourClass = new OurClass();

        try {
            // 1. 위험한 메소드의 실행을 "시도" 해 봅니다.
            // "시도" 해보는 코드가 들어가는 블럭입니다.
            ourClass.thisMethodIsDangerous();
        } catch (OurBadException e) {
            // 2. 예외가 발생하면, "잡아서" handling 합니다.
            // 예외가 발생하는경우 "handling" 하는 코드가 들어가는 블럭입니다.
						// 즉 try 블럭 내의 구문을 실행하다가 예외가 발생하면
						// 예외가 발생한 줄에서 바로 코드 실행을 멈추고
						// 여기 있는 catch 블럭 내의 코드가 실행됩니다.
            System.out.println(e.getMessage());
        } finally {
            // 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
            // 무조건 실행되는 코드가 들어가는 블럭입니다.
            System.out.println("우리는 방금 예외를 handling 했습니다!");
        }

    }
}

 

사실 예제를 보면서 뭐...? 예외 처리 하려면 클래스가 3개가 필요한건가..? 했는데 그건 아닙니다 ㅋㅋㅋ

public Parser parseFirstNum(String firstInput) throws Exception{
        if (!Pattern.matches(NUMBER_REG, firstInput)) {
            throw new BadInputException("정수값");
        }

이런식으로 if문으로 오류 발생 여부를 확인하고 throw로 던져주시면 됩니다! 

1. try-catch

2. throws, throw 

중 취향따라 하나 골라서 서술하시면 됩니다.

인텔리제이로 코딩하다보니 throw 함수를 사용하면 자동 완성도 해줘서 생각보다 예외 처리 어렵지 않았어요!

 

이번주 주말도 인텔리제이와 오붓하게 보내보겠습니다.. 자바를 배우는 모든 여러분들 화이팅 !