HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🍗
[New] 조규현팀
/
🏪
TS Store
/
Optional 알아보기

Optional 알아보기

Person
완료율%
상태
완료
나의 블로그
Think Sharing (TS)
📝
자바8 Optional
주제목차내용번외김병연null 이란?null 왜 안될까?optional이 뭐지?Optional 왜 사용해야 하지?언제 사용할까?
 

주제

목차

 

내용

 

번외

  • isEmpty() 보다 1.orElseThrow 및 2.orElse | orElseGet 순으로 사용한다.
김병연 - isEmpty() 보다 **주제와 다른 이야기** := while(!stack.isEmpty()) := while(stack.size()>0) ==> '!' 연산자 때문에 한번 더 생각하게 만들기 때문이다.
 

김병연

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이 뭐지?

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

Optional 왜 사용해야 하지?

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

언제 사용할까?

멘토님 링크 참조하세요 ‼️
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