부트캠프에서 처음으로 java수업을 받고 있기에 기록하는 게 좋다고 생각했고, 수업이 있는 날이면 매일 글을 쓰려고 합니다. 쵀대한 몰랐거나 필요하다고 생각되는 내용 위주로 기록할 예정입니다. (제가 게을러서 이러한 시도를 성공한 적이 없기에 이번 부트캠프 목표 중 1가지입니다. 할 수 있도록 화이팅!!)
✅ Error: 시스템 상에서 프로그램에 심각한 문제를 발생하여 실행중인 프로그램이 종료되는 것을 말한다. 이러한 오류는 개발자가 미리 예측하여 처리하는 것이 불가능하며, 오류에 대한 처리는 할 수 없다.
✅ Exception: 오류와 마찬가지로 실행중인 프로그램을 비정상적으로 종료시키만, 발생할 수 있는 상황을 미리 예측하고 처리할 수 있는 미약한 오류를 말한다. 개발자는 이러한 예외에 대해 예외처리를 통해 예외 상황을 적절히 처리하여 코드의 흐름을 컨트롤 할 수 있다.
구분 Exception (예외) Error (오류) 발생 원인 프로그래머의 실수 또는 예측 가능한 문제 시스템(JVM) 레벨의 심각한 문제 복구 가능 여부 보통 복구 가능 ( try-catch
로 처리 가능)복구 불가능 (대부분 프로그램 종료) 예제 IOException
,NullPointerException
OutOfMemoryError
,StackOverflowError
처리 방식 try-catch
로 예외 처리 가능일반적으로 예외 처리를 하지 않음
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 블럭 실행");
}
✅ 부모의 예외처리 클래스보더 더 하위에 있는 예외(즉, 더 구체적인 예외상황)인 경우에는 오버라이딩 할 수 있다
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);
}
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> | X | O | 값을 제공하는 함수 (매개변수 없음) |
Consumer<T> | O | X | 값을 소비하는 함수 (리턴 없음) |
Function<T, R> | O | O | 입력을 받아 다른 값으로 변환 |
Predicate<T> | O | boolean | 조건을 검사하여 참/거짓 반환 |
BiFunction<T, U, R> | O | O | 두 개의 입력을 받아 변환 |
자바 에러(Error) 와 예외 클래스(Exception)
https://inpa.tistory.com/entry/JAVA-☕-에러Error-와-예외-클래스Exception-💯-총정리 [Inpa Dev 👨💻:티스토리]