GOORM-DEEP DIVE 백엔드 3회차 회고 DAY8

Cori1304·2025년 3월 7일
0

GOORM-DEEPDIVE

목록 보기
7/19

글을 쓰게된 배경

부트캠프에서 처음으로 java수업을 받고 있기에 기록하는 게 좋다고 생각했고, 수업이 있는 날이면 매일 글을 쓰려고 합니다. 쵀대한 몰랐거나 필요하다고 생각되는 내용 위주로 기록할 예정입니다. (제가 게을러서 이러한 시도를 성공한 적이 없기에 이번 부트캠프 목표 중 1가지입니다. 할 수 있도록 화이팅!!)


chap13~15 수업 내용 정리

Error & Exception

✅ Error: 시스템 상에서 프로그램에 심각한 문제를 발생하여 실행중인 프로그램이 종료되는 것을 말한다. 이러한 오류는 개발자가 미리 예측하여 처리하는 것이 불가능하며, 오류에 대한 처리는 할 수 없다.
✅ Exception: 오류와 마찬가지로 실행중인 프로그램을 비정상적으로 종료시키만, 발생할 수 있는 상황을 미리 예측하고 처리할 수 있는 미약한 오류를 말한다. 개발자는 이러한 예외에 대해 예외처리를 통해 예외 상황을 적절히 처리하여 코드의 흐름을 컨트롤 할 수 있다.

구분Exception (예외)Error (오류)
발생 원인프로그래머의 실수 또는 예측 가능한 문제시스템(JVM) 레벨의 심각한 문제
복구 가능 여부보통 복구 가능 (try-catch로 처리 가능)복구 불가능 (대부분 프로그램 종료)
예제IOException, NullPointerExceptionOutOfMemoryError, StackOverflowError
처리 방식try-catch로 예외 처리 가능일반적으로 예외 처리를 하지 않음


다중 catch 블록과 Exception 순서

JAVA에서 try-catch 블록은 위에서부터 순차적으로 검사되면서 해당되는 첫 번째 catch 블록에서 예외를 처리한다. 즉, 예외가 발생하면 위에서부터 내려오면서 catch 블록을 하나씩 검사하고, 해당되는 첫 번째 블록이 실행되면 아래 블록들은 무시된다.

/ *
NotEnoughMoneyException이 발생해도, (1) Exception 블록이 먼저 
실행되므로 (2) NotEnoughMoneyException 블록은 도달할 수 없음
👉 따라서 "NotEnoughMoneyException 발생!" 메시지가 출력되지 않고
"Exception 발생!"**만 출력되는 에러가 발생함 (인텔리제이는 컴파일 에러로 보고 실행 안됨)
*/
try {
    // 어떤 코드 실행
} catch (Exception e) { // (1) 최상위 예외 클래스
    System.out.println("Exception 발생!");
} catch (NotEnoughMoneyException e) { // (2) 구체적인 예외
    System.out.println("NotEnoughMoneyException 발생!");
}

아래 코드와 같이 하면 에러 없이 동작한다.

try {
    et.checkEnoughMoney(20000, 30000);
} catch (NotEnoughMoneyException e) {  // ✅ 구체적인 예외 먼저
    System.out.println("NotEnoughMoneyException 발생!");
} catch (PriceNegativeException e) {   // ✅ 다른 구체적인 예외
    System.out.println("PriceNegativeException 발생!");
} catch (MoneyNegativeException e) {   // ✅ 또 다른 구체적인 예외
    System.out.println("MoneyNegativeException 발생!");
} catch (Exception e) {  // ✅ 최상위 부모 예외는 마지막에!
    System.out.println("기타 Exception 발생!");
} finally {
    System.out.println("finally 블럭 실행");
}


Checked Exception Restriction in Overriding

✅ 부모의 예외처리 클래스보더 더 하위에 있는 예외(즉, 더 구체적인 예외상황)인 경우에는 오버라이딩 할 수 있다

class SuperClass {
    public void method() throws IOException {} // Checked Exception
}

class SubClass extends SuperClass {
    @Override
    public void method() throws RuntimeException {} // ✅ 가능 (Unchecked Exception은 제한 없음)
}

람다식

Java 8부터 도입된 기능으로 함수를 간결하게 표현하는 방법이다.
익명 함수(이름 없는 함수)를 만들 수 있고 함수형 인터페이스(Functional Interface)와 함께 사용한다.

함수형 인터페이스

함수형 인터페이스는 추상 메서드가 단 하나만 존재하는 인터페이스이고
@FunctionalInterface 어노테이션 사용 가능하다.

@FunctionalInterface
interface MyFunction {
    int calculate(int a, int b);
}

Java에서 제공하는 함수형 인터페이스

import java.util.function.*;

public class FunctionalInterfacesExample {
    public static void main(String[] args) {
        // Consumer 예제
        Consumer<String> printMessage = message -> System.out.println("메시지: " + message);
        printMessage.accept("Hello, Java!");

        // Supplier 예제
        Supplier<String> getGreeting = () -> "Hello, World!";
        System.out.println(getGreeting.get());

        // Function 예제
        Function<Integer, String> convertToString = num -> "숫자: " + num;
        System.out.println(convertToString.apply(42));

        // Operator 예제
        UnaryOperator<Integer> square = x -> x * x;
        System.out.println(square.apply(5));

        // Predicate 예제
        Predicate<Integer> isEven = num -> num % 2 == 0;
        System.out.println(isEven.test(10));
        System.out.println(isEven.test(7));
    }
}
함수형 인터페이스매개변수반환값설명
Supplier<T>XO값을 제공하는 함수 (매개변수 없음)
Consumer<T>OX값을 소비하는 함수 (리턴 없음)
Function<T, R>OO입력을 받아 다른 값으로 변환
Predicate<T>Oboolean조건을 검사하여 참/거짓 반환
BiFunction<T, U, R>OO두 개의 입력을 받아 변환


배운 점

  1. Exception 객체가 여러갈래 나눠저서 사용되는 것
    2.catch 블록과 Exception 순서가 있어서 순서를 고려하고 exception을 설정해야 하는것 (처음에 에러가 나서 많이 당황했다..)
  2. 람다가 인터페이스에서 먼저 선언 후에 사용되는 방식인것

참고 자료

profile
개발 공부 기록

0개의 댓글

관련 채용 정보