HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
✍🏻
Learnary (learn - diary)
/
🎏
Optional
🎏

Optional

progress
Done
Tags
Java

null 이란?

💭
물리적으로 어떠한 메모리도 가르키지 않는 상태를 말한다.
 
java에서 null은 참조형 타입의 기본 값이다.
8가지 기본형 타입을 제외하고 참조형이 기본으로 가질 수 있는 타입이다.
 
null은 기본형이나 참조형과 같은 데이터 타입으로 구분되는 것이 아니다! 단순히 참조형 타입에게 부여할 수 있는 특수한 값이다.
심지어 형변환도 가능함.
String str = (String) null; Integer val = (Integer) null; // primitive type int value = null; // ### 컴파일 오류 발생
 

null 왜 안될까?

  • 자바는 포인터라는 개념을 숨기고 있다. 그러므로 쉽게 NullPointerException 쉽게 만날 수 있게 되었다.
  • 래퍼선스가 가르키는 방향(포인터)이 없는 null 참조는 존재 자체로 에러의 근원이다. [에러와 오류는 다름.]
  • null 참조는 컴파일 시점에 알 수 없다.(원시타입은 컴파일 시점에 알수 있다.)
    • 컴파일 시점에 오류를 발견하는것이 가장 좋다!!!
    •  
👀 확인

autoBoxing

Integer BoxedValue = null; int intValue = boxedValue; // NullPointerException 발생
Map<Integer, Integer> map = new HashMap<>(); List<Integer> numbers = List.of(2, 3, 1, 5); for (int number : numbers) { int count = map.get(number); // `get`의 결과가 null 인 경우 NPE 발생 [primitive type] map.put(number, ++count); }

static

public class TestClass { public static void say() { // ...생략 } public static void main(String[] args) { TestClass testClass = null; testClass.say(); // 레퍼런스가 null이지만 NPE가 발생하지 않는다. } }
  • 클래스의 정적(static) 멤버는 각각의 인스턴스가 아닌 클래스 메모리 영역에 속하기 때문에, 컴파일 타임에 최적화가 된다. 즉 ‼️ 클래스를 통해 정적 메서드를 호출하는 코드로 변하게 된다.

연산자

  • null은 사용할 수 있는 연산자가 제한적이다.
  • null 을 참조하는 레퍼런스나 null에 instanceof 연산자를 사용하면 false 를 반환하지만, >, >=, <, <=와 같이 크고 작음을 비교하는 관계 연산자를 사용하는 경우 NullPointerException이 발생한다.
 

Optional이 뭐지?

💭
자바에서 라이브러리 메서드가 반환할 결과값이 ‘없음’을 명백하게 표현할 수 있는 키워드이다.
  • 즉, 값이 존재할 수도, 존재하지 않을 수도 있는 값을 포장한 객체
 

Optiona 왜 사용해야 하지?

  • 우리가 만드는 시스템에 해가 될 수 있는 NullPointerException 오류!!! 를 방지하기 위함이다.
 
📌
메서드 반환할 결과값 또는 변수가 ‘값이 없음⚠️’을 명백하게 표현할 필요가 있고, null을 반환하면 에러(NullPointer Exception)를 유발할 가능성이 높은 상황에서 메서드의 반환 타입으로 Optional을 사용하자는 이 Optional을 만든 주된 목적이다.
 
주의 사항⚠️
Optional 타입의 값은 절대 null이어서는 안 되며, 항상 Optiona 인스턴스를 가리켜야 한다.
 
 
 

REF

Optional (Java SE 11 & JDK 11 )
Optional is primarily intended for use as a method return type where there is a clear need to represent "no result," and where using null is likely to cause errors. A variable whose type is Optional should never itself be null; it should always point to an Optional instance.
Optional (Java SE 11 & JDK 11 )
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Optional.html
자바 Optional: 1. null은 무엇인가?
영국의 컴퓨터과학자인 토니 호어(Tony Hoare) 가 1965년에 알골(ALGOL W)이라는 프로그래밍 언어를 설계하면서 처음 등장했다. 당시에 그는 null 참조라는 개념이 "값이 없는 상황을 가장 단순하게 구현할 수 있는 방법"이라고 생각했다. 하지만 시간이 흘러 2009년, 한 소프트웨어 컨퍼런스에서 그는 자신이 고안한 null 참조를 "10억 달러짜리 실수"라고 표현하며 사과했다.
자바 Optional: 1. null은 무엇인가?
https://madplay.github.io/post/what-is-null-in-java
자바 Optional: 1. null은 무엇인가?
homoefficio.github.io
https://homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5%B4%EA%B2%8C-%EC%93%B0%EA%B8%B0/