• 분류 전체보기 (512)
    • 개발남노씨(Coding Test) (6)
    • 고농축 백엔드 (17)
    • 재귀함수 DFS 총정리 (1)
    • 프론트엔드 날개달기:Vuejs.React (1)
    • 훈훈한 javascript (5)
    • 렛츠기릿 자바스크립트 (18)
    • 나도코딩 (1)
      • 웹 스크래핑 (1)
    • 프로그래머스(자바스크립트) (41)
      • LV.0(자바스크립트) (41)
    • 프로그래머스(자바) (121)
      • LV.0(자바) (56)
      • LV.1(자바) (41)
      • LV.2(자바) (23)
    • 프로그래머스(파이썬) (127)
      • LV.0(파이썬) (46)
      • LV.1(파이썬) (51)
      • LV.2(파이썬) (30)
    • 임시저장소 (31)
    • 프로젝트 (0)
    • 자바 알고리즘 (13)
      • 알고리즘 직빵 자바 문법 (10)
      • String(문자열) (3)
    • 파이썬 알고리즘 (93)
      • 알고리즘 직빵 파이썬 문법 (20)
      • 알고리즘 백준 (2)
      • 파이썬 알고리즘(사고력기르기) (6)
      • 파이썬 탐색 & 시물레이션 (8)
      • 이분탐색 & 그리디 알고리즘 (10)
      • 스택, 큐, 해쉬, 힙 (10)
      • 완전탐색과 DFS기초 (12)
      • DFS, BFS 활용 (19)
      • 동적계획법 (6)
    • 자바 (27)
      • Java TPC(생각하고, 표현하고, 코딩하고) (17)
      • Java (중요하고, 이해 안 되고, 어려운) (10)
    • 스프링 (5)
      • 스프링 MVC 패턴 2편 (5)
hELLO · Designed By 정상우.
@@#@@

기록용 블로그

Optional <T>
자바/Java (중요하고, 이해 안 되고, 어려운)

Optional <T>

2022. 10. 30. 23:58

Optional

1. Optional을 사용하는 이유 

       null을 한번 감싸서 간접적으로 다루기 위함

 

2. null 직접적으로 다루는 경우 

     1) NullpointException이 발생할 가능성이 있다.

     2) if( result ! = null) ---- null을 체크하기 위한 if문이 필수, 코드가 복잡해짐 

 

 

  public final class Optional<T> {
  	  private final T value;   //T타입의 참조변수    ex) Animal   ani
      ...                                                 객체타입 참조변수
  }
  • Optional<T>는 'T타입의 객체'를  감싸는 래퍼 클래스이다.  여기서 T는 "null을 포함한 모든 객체를 의미"한다. 따라서  Optional타입의 객체에는 모든 타입의 객체를 담을 수 있다.

 

  • value는 "참조변수"이므로 null을 포함한 주소값이 저장될 수 있는데,
  • String 타입의 주소값이 저장되면, String객체를 가리키고,
  • Integer타입의 주소값이 저장되면 Integer를 가리키고,
  • Person타입의 주소값이 저장되면 Person객체를 가리킨다.
  • 따라서  Optional타입의 객체에는 모든 타입의 객체를 담을 수 있다. 

 

 

3. Optional<T>객체를 생성하는 다양한 방법

  String str = "abc";
  Optional<String> opt = Optional.of(str);               //클래스.메서드이름(x)
  Optional<String> opt = Optional.of("abc");
  Optional<String> opt = Optional.of(null);             //NullPointerException발생  
  Optional<String> opt = Optional.ofNullable(null);     //OK

*String str = null; 이 될 수 있으므로 Optional객체의 value(참조변수)값이 null 이 될 수 있다. 

 

 

4. null대신 빈 Optional<T> 객체를 사용하자

Optional<String> opt = Optional.<String>empty();  //빈 객체로 초기화, <String>생략가능

 

5. Optional<T> 객체의 값 가져오기

    Optional<String> optVal = Optional.of("abc");   //클래스.메소드이름(x)
    String str1 = optVal.get(); 					//optVal에 저장된 값을 반환. null이면 예외발생
    String str2 = optVal.orElse(-1);                //optVal에 저장된 값이 null일 때는, -1를 반환
 													//값이 있는 경우에는 그 값을 반환   
    String str3 = optVal.orElseGet(String::new);           //람다식 사용가능 () -> new String()
    String str4 = optVal.orElseThrow(NullPointerException::new);  //예외종류 지정가능

 

  if (str != null) {
       System.out.println(str);
   }

 

 

6. isPresent()는 Optional객체의 값이  null이 아니면 True를 반환하고, null이면 false를 반환한다.

   if(Optional.ofNullable(str).isPresent()) {
       System.out.println(str);
   }

 

7. ifPresent()는 Optional객체의 값이 null이 아니면, 람다식을 수행하고, null이면 아무 일도 일어나지 않는다. 

Optional.ofNullable(str).ifPresent(System.out::println);

 

 

8. OptionalInt : int형을 감싸는 래퍼클래스

 public final class OptionalInt {
 	...
    private final boolean isPresent;  //값이 저장되어 있으면 true
    private final int value;
    
    }

 

9. OptionalInt 심화

 OptionalInt opt = OptionalInt.of(0);     //OptionalInt 객체에 0을 저장
 OptionalInt opt2 = OptionalInt.empty();     //OptionalInt 객체에 0을 저장
 
 OptionaInt객체가 아무런 값도 갖지 않는 경우 0이 저장됨

 

 System.out.println(opt.isPresent());   //true 값이 있다.
 System.out.println(opt2.isPresent());  //false 값이 없다.
 System.out.println(opt.equals(opt2));  //fasle 0을 저장하는 것과 값이 없어서 0을 저장하는 것은 다르다.

 

저작자표시 비영리 변경금지 (새창열림)

'자바 > Java (중요하고, 이해 안 되고, 어려운)' 카테고리의 다른 글

Stream  (0) 2022.10.31
메서드 참조  (0) 2022.10.30
람다 Lambda  (0) 2022.10.30
Comparable  (0) 2022.10.27
생성자  (0) 2022.10.26
    '자바/Java (중요하고, 이해 안 되고, 어려운)' 카테고리의 다른 글
    • Stream
    • 메서드 참조
    • 람다 Lambda
    • Comparable
    @@#@@
    @@#@@
    자바, 스프링, 알고리즘, 깃허브, 파이썬

    티스토리툴바