๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ/Java

[Java] Optional ๊ฐ์ฒด : ifPresent(), isPresent(), orElse(), map()

by HanaV 2023. 3. 22.
728x90

Optional ๊ฐ์ฒด๋Š” Wrapper ๊ฐ์ฒด์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค. (Generic type)

์—ญํ•  ๋ฐ ๋ชฉ์ : ๋งค๋ฒˆ null ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ธฐ ๊ท€์ฐฎ๊ณ  ๊นŒ๋จน์œผ๋‹ˆ๊นŒ ์ž๋ฐ” 8 ๋ฒ„์ „๋ถ€ํ„ฐ null ์ฒ˜๋ฆฌ ์ „์šฉ ๊ฐ์ฒด์ธ Optional ๊ฐ์ฒด๊ฐ€ ์ƒ๊ฒผ๋‹ค. Optional์— ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด์„œ null๊ฐ’ ๋ฐœ์ƒ์„ ๋Œ€๋น„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

null : ๋“ค์–ด์™€์•ผ ํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ๋“ค์–ด์˜ค๋ฉด ์ž๋ฐ”๊ฐ€ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ณ€์ˆ˜๋‚˜ ๊ฐ์ฒด ๋“ฑ์— ๋„ฃ์–ด์ฃผ๋Š” "์ผ์ข…์˜" ๋ฐ์ดํ„ฐ ํƒ€์ž…. ์‹คํ–‰ ์‹œ null์ด ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ, ๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์†Œ๋“œ์—์„œ  NullPointException ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ๋˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋žจ ์ž‘๋™์ด ์ค‘๋‹จ๋œ๋‹ค.

String s = str == null?"null์ด ๋ฐœ์ƒ":str;          ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉํ•ด์„œ null ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ธฐ๋„ ํ•˜๊ณ 
if(str == null) s = "null์ด ๋ฐœ์ƒ"
     else s = str;                                              ์ด๋ ‡๊ฒŒ if ์—ฐ์‚ฐ์ž๋กœ ๋‚˜ํƒ€๋‚ด์ฃผ๊ธฐ๋„ ํ•œ๋‹ค.

 

 

1. ifPresent() : ์‹คํ–‰๊ตฌ๋ฌธ์—์„œ null์ด ๋ฐœ์ƒํ•˜๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ํ•จ

-์—๋Ÿฌ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ (๊ฐ’์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ)

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;


public class OptionalExample {
    public static void main(String[] args) {
        
        List<String> list1 = new ArrayList<>();
        list1.add("Hello");
        list1.add("Java");
        list1.add("World");


        //1. ifPresent() --> ์‹คํ–‰๊ตฌ๋ฌธ์—์„œ null์ด ๋ฐœ์ƒํ•˜๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ํ•จ
        Optional<List<String>> optional1 = Optional.of(list1);
        optional1.ifPresent(s -> System.out.println(s));
     }
 }

console

[Hello, Java, World]

null์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ทธ๋Œ€๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

-์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ (null์ธ ๊ฒฝ์šฐ)

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;


public class OptionalExample {
    public static void main(String[] args) {
        
        List<String> list1 = new ArrayList<>();
        list1.add("Hello");
        list1.add("Java");
        list1.add("World");


        List<String> list2 = null;
        //System.out.println(list2.get(0)); --> case1: ๊ทธ๋ƒฅ ์ถœ๋ ฅ
        Optional<List<String>> optional2 = Optional.ofNullable(list2);
        optional2.ifPresent(s -> System.out.println(s.get(0))); //case2: Optional.ofNullable()์„ ์‚ฌ์šฉ
    }
    
}

console

//case1: ์—๋Ÿฌ๋ฌธ์ด ๋‚˜์˜ด
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.List.get(int)" because "list2" is null
//case2: null๊ฐ’์ด ์žˆ์–ด์„œ ์‹คํ–‰๋˜์ง€ ์•Š์Œ

์œ„์™€ ๊ฐ™์ด ๊ทธ๋ƒฅ get()์ด๋‚˜ of()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด NullPointerException ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ofNullable()์„ ์จ์•ผ ifPresent()๋ฅผ ์ผ์„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๊ณ  ์‹คํ–‰์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

2. isPresent() : Optional ๊ฐ์ฒด์˜ ๊ฐ’์ด null์ด๊ฑฐ๋‚˜ false๊ฐ’์ด ๋ฐœ์ƒ๋˜๋ฉด false ๋ฐ˜ํ™˜, ์•„๋‹ˆ๋ฉด True ๋ฐ˜ํ™˜

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;


public class OptionalExample {
    public static void main(String[] args) {


        System.out.println(Optional.of("Test").isPresent());
                //Optional ๊ฐ์ฒด ์•ˆ์— ๊ฐ’์ด ์žˆ์œผ๋ฏ€๋กœ True ๋ฆฌํ„ด
        System.out.println(Optional.ofNullable(null).isPresent());
                //Optional ๊ฐ์ฒด์— null์ด ๋“ค์–ด์˜ค๋‹ˆ๊นŒ False ๋ฆฌํ„ด
        System.out.println(Optional.of("Test").filter(v -> "est".equals(v)).isPresent());
                //Optional ๊ฐ์ฒด์— false๊ฐ’์ด ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— False ๋ฆฌํ„ด


    }
    
}

 

 

3. orElse() : ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๊ณ , ์—†์œผ๋ฉด orElse()๋‚ด์˜ ์ธ์ž๊ฐ’์„ ๋ฆฌํ„ด

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;


public class OptionalExample {
    public static void main(String[] args) {


        String a = "ABCD";
        String result;

        Optional<String> optional3 = Optional.ofNullable(a);
        result = optional3.filter(s -> s.startsWith("AB"))
                          .orElse("AB๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด๊ฐ€ ์—†์Œ");
        System.out.println(result);

        result = optional3.filter(s -> s.startsWith("X"))
                          .orElse("X๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด๊ฐ€ ์—†์Œ");
        System.out.println(result);

    }
    
}

console

ABCD
X๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด๊ฐ€ ์—†์Œ

orElse()๋Š” ๋ฐ‘์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

4.map() 

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;


public class OptionalExample {
    public static void main(String[] args) {
  
        System.out.println(Optional.of("XYZ")
                                   .map(String::toLowerCase)
                                   .orElse("์˜ค๋ฅ˜๋ฐœ์ƒ")); //์˜ˆ์™ธ์ฒ˜๋ฆฌ๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    }
    
}

console

xyz
728x90

"); wcs_do();