[Java] Null & 예외 (Exception) 기초 및 정의 | Checked & Unchecked

2023. 4. 1. 23:12·Java
목차
  1. Null 기초 정리
  2. 예외 Exception
  3. 관련 내용

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 예외라는 두 종류의 예외가 있습니다.

Fig. 1. 예외 계층 구조

  1. Checked 예외:
    • Exception은 대부분의 checked 예외의 기본 클래스입니다.
    • 이러한 예외에 대해 컴파일러는 메서드에 정적 검사를 적용합니다.
    • 예외가 발생할 수 있는 경우, 반드시 처리하거나 메서드 선언에 throws를 사용해야 합니다.
  2. Unchecked 예외:
    • RuntimeException과 그 서브클래스는 unchecked 예외로 간주됩니다.
    • 이러한 예외는 메서드의 throws 절에 선언할 필요가 없으며, 호출하는 쪽에서 반드시 처리할 필요가 없습니다.
    • 또한, Error와 그 서브클래스도 unchecked 예외입니다. 이러한 예외는 Java 런타임 시스템에서 발생한 오류를 나타냅니다 (예: StackOverflowError, OutOfMemoryError).
    • Error 는 회복 불가능한 것으로 간주되어 코드에서 일반적으로 처리되지 않아야 합니다.
      • (* 회복이 불가능하다는 것은 오류나 예외가 발생한 상태에서 정상적인 실행상태로 돌아갈수 없다는 뜻입니다)
  3. 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


저작자표시 비영리 변경금지 (새창열림)
  1. Null 기초 정리
  2. 예외 Exception
  3. 관련 내용
'Java' 카테고리의 다른 글
  • [Java 8] 코딩 기초 트레이닝 Day 19 split & 정규식, ArrayList
  • [Java 8] 프로그래머스 코딩테스트 연습 split(), replace()
  • [Java] 이중 연결리스트(Doubly-Linked-List) | 구현
  • [Java] javadoc이란 | 전제조건 & 사후조건 @param, @return @throw
Jelong
Jelong
커스텀 웹: https://jaehong-park.com Github: https://github.com/qkrwoghd04
  • Jelong
    24/7 Developer's Note
    Jelong
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Software Engineering
      • Ubuntu
      • Network
      • JavaScript
      • Web
      • Interaction Design
      • React Native
      • React
      • Algorithm
      • Java
      • Database design
      • IT Trend
      • TroubleShooting
      • AWS
      • Interview
      • LG CNS AM CAMP 1기
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JS
    expo
    frontend
    BST
    java
    mininet
    html
    prototyping
    Queues
    자바스크립트
    블랙 박스 테스트
    알고리즘
    데이터 구조
    알고리즘 분석
    자바
    오블완
    generic
    GPT-4
    소프트웨어 공학
    heap
    이진트리
    css
    미니넷
    javascript
    화이트 박스 테스트
    티스토리챌린지
    AWS
    ChatGPT
    typescript
    React
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Jelong
[Java] Null & 예외 (Exception) 기초 및 정의 | Checked & Unchecked

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.