Null 기초 정리
Java에서 null은 참조 변수가 어떤 객체도 가리키지 않음을 나타내는 특별한 값입니다. 기본형(int, double, float)과 달리 참조 변수(String, int[], Class Object)에는 null을 할당할 수 있으며 이는 컴파일러에 의해 허용됩니다.
int a = null; // illegal
double b = null; // illegal
String c = null; // possible
int[] d = null; // possible
그러나 null 참조를 사용하여 메소드를 호출하거나 필드에 접근하려고 하면 NullPointerException이 발생합니다.
c.length() // throw NullPointerException
d.length() // throw NullPointerException
// null != ""
null은 빈 문자열 또는 빈 배열 "" 과 같지 않으며, 빈배열의 길이는 0이지만, null은 NullPointerException을 발생시킵니다.
Java에서는 null 값이 문제가 많고 안전하지 않기 때문에 대부분의 좋은 프로그래밍에서는 null 값이 암시적으로 금지됩니다. 즉, 모든 메소드는 객체 및 배열 매개 변수가 null이 아니어야 하는 전제 조건을 가지며, 객체 또는 배열을 반환하는 모든 메소드는 반환 값이 null이 아니어야 하는 사후 조건을 가지게 됩니다.
static boolean addAll(@NonNull List<T> list1, @NonNull List<T> list2)
그래서 다음과 같이 Java에는 타입 선언에서 직접 null 값을 금지시킬 수 있는 확장 기능(@NonNull) 이 있습니다.
이를 통해 컴파일 시간이나 런타임에서 자동으로 확인할 수 있습니다.
예외 Exception
우리는 프로그래밍을 하면서 많은 예외들을 만나는데, 다음과 같은 예외들이 프로그래밍을 할때, 자주 접할 수 있는 예외입니다
- IndexOutOfBoundsException: 리스트 범위를 벗어난 인덱스를 사용할 때 발생하는 예외입니다. 이는 코드 내의 버그를 나타내는 경우가 많습니다.
- NullPointerException: null 객체 참조에서 메소드를 호출하려고 할 때 발생하는 예외입니다. 이 역시 코드 내의 버그를 나타내는 경우가 많습니다.
- ArithmeticException: 정수를 0으로 나누는 산술 연산과 같은 산술 오류로 발생하는 예외입니다.
- NumberFormatException: Integer.parseInt와 같은 메소드에 정수로 변환할 수 없는 문자열을 전달하는 경우 발생하는 예외입니다.
이러한 예외들은 코드 내의 문제를 나타내는 중요한 신호입니다. 이러한 예외를 처리함으로써 코드의 안정성과 신뢰성을 높일 수 있습니다. 더 자세한 내용은 아래 링크를 참고해주세요.
[Java] 자바 프로그래밍에서 흔히 발생하는 에러와 해결 방법!
Java 에러란? 자바 프로그래밍에서 에러는 불가피한 존재이며, 이를 해결하는 것은 중요한 프로그래밍 능력 중 하나입니다.이번 글에서는 자바에서 흔히 발생하는 에러에 대해 다루고, 이를 해결
jelong.tistory.com
Checked & Unchecked 예외
Java에서 예외를 사용하는 두 가지 주요 목적은 특별한 결과를 전달하고 버그를 찾아내는 것입니다. 이를 위해 checked 예외와 unchecked 예외라는 두 종류의 예외가 있습니다.
- Checked 예외:
- Exception은 대부분의 checked 예외의 기본 클래스입니다.
- 이러한 예외에 대해 컴파일러는 메서드에 정적 검사를 적용합니다.
- 예외가 발생할 수 있는 경우, 반드시 처리하거나 메서드 선언에 throws를 사용해야 합니다.
- Unchecked 예외:
- RuntimeException과 그 서브클래스는 unchecked 예외로 간주됩니다.
- 이러한 예외는 메서드의 throws 절에 선언할 필요가 없으며, 호출하는 쪽에서 반드시 처리할 필요가 없습니다.
- 또한, Error와 그 서브클래스도 unchecked 예외입니다. 이러한 예외는 Java 런타임 시스템에서 발생한 오류를 나타냅니다 (예: StackOverflowError, OutOfMemoryError).
- Error 는 회복 불가능한 것으로 간주되어 코드에서 일반적으로 처리되지 않아야 합니다.
- (* 회복이 불가능하다는 것은 오류나 예외가 발생한 상태에서 정상적인 실행상태로 돌아갈수 없다는 뜻입니다)
- Java 예외 계층 구조:
- RuntimeException이 Exception의 서브클래스라서 이해하기 어려울 수 있습니다.
- Exception 계층 구조에는 checked 예외(직접적인 서브클래스)와 unchecked 예외(RuntimeException 가족의 분기)가 모두 포함됩니다.
- 하지만, Error는 Exception의 서브클래스가 아니므로, Error 계층의 unchecked 예외는 Exception 계층 구조 밖에 위치합니다.
각각 어떤 부분이 차이가 있는지 좀 보이시나요? 다시 한번 정리하면, Check 예외는 File의 부제나 네트워크 연결의 문제 개발자의 잘못이아닌 사용자의 환경에서 발생할 수 있는 예외 입니다. 반면에 Uncheck 예외는 사용자의 잘못이 아닌, 개발자가 코드를 작성할때의 실수로 발생할 수 있는 예외들입니다. 그래서 Uncheck의 예외의 경우 컴파일러는 try-catch문이나 throw 절 선언을 확인하지 않고, throw절은 작성은 할 수 있지만, 권장하지 않습니다.
관련 내용
2023.03.31 - [자바 JAVA] - [Java] javadoc이란 | 전제조건 & 사후조건 @param, @return @throw
[Java] javadoc이란 | 전제조건 & 사후조건 @param, @return @throw
javadoc 이란? javadoc은 자바 개발자들이 자바 소스 코드를 문서화하기 위해 사용하는 도구입니다. javadoc은 소스 코드에 있는 특정 주석을 기반으로 문서를 생성합니다. 이러한 문서에는 소스 코드
jelong.tistory.com