Optional<T> ํด๋ž˜์Šค๋ž€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด์ž!

2023. 9. 3. 13:41ยท ๐Ÿง Programming/Java
๋ชฉ์ฐจ
  1. (1) ๊ฐœ์š”
  2. (2) Optional ํด๋ž˜์Šค
  3. (3) Optional ๊ฐ์ฒด ์ƒ์„ฑ
  4. โ‘  Optional.of()
  5. โ‘ก Optional.ofNullable()
  6. โ‘ข Optional.empty()
  7. (4) Optional ๊ฐ์ฒด ์‚ฌ์šฉ
  8. โ‘  get()
  9. โ‘ก orElse()
  10. โ‘ข orElseGet()
  11. โ‘ฃ orElseThrow()
  12. โ‘ค isPresent()
  13. โ‘ฅ ifPresent()
  14. (5) ๊ธฐ๋ณธ ํƒ€์ž…์˜ Optional ํด๋ž˜์Šค
  15. โ‘  OptionalInt ํด๋ž˜์Šค
  16. โ‘ก OptionalLong ํด๋ž˜์Šค
  17. โ‘ข OptionalDouble ํด๋ž˜์Šค
  18. (6) Optional ์‚ฌ์šฉ ์‹œ, ์ฃผ์˜ ์‚ฌํ•ญ
  19. โ‘  isPresent() + get() ๋ฉ”์†Œ๋“œ ๋Œ€์‹  orElseGet()์„ ์‚ฌ์šฉํ•œ๋‹ค!
  20. โ‘ก orElse() ๋Œ€์‹  orElseGet()์„ ์‚ฌ์šฉํ•œ๋‹ค!
  21. โ‘ข of(), ofNullable() ํ˜ผ๋™ํ•˜์ง€ ๋ง์ž!
  22. โ‘ฃ ๊ธฐ๋ณธ ํƒ€์ž…์ด๋ผ๋ฉด Optional<\T> ๋Œ€์‹  OptionalInt, Long, Double ์‚ฌ์šฉํ•˜์ž!
  23. โ‘ค Optional ๊ฐ์ฒด๋ฅผ ์ปฌ๋ ‰์…˜์˜ ์›์†Œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž!

1) ์˜ต์…”๋„ (Optional)

 

(1) ๊ฐœ์š”

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.

  • ์œ„์˜ ๋‚ด์šฉ์€ JDK 8 API Document์— ์ฃผ์„์œผ๋กœ ์ ํ˜€์žˆ๋Š” ๋ถ€๋ถ„ ์ค‘ ์ผ๋ถ€๋ฅผ ๋ฐœ์ทŒํ•œ ๊ฒƒ์œผ๋กœ, ์˜์—ญํ•˜์ž๋ฉด Java Optional ํด๋ž˜์Šค๋Š” Java 8์—์„œ ์ถ”๊ฐ€๋œ ํด๋ž˜์Šค๋กœ Java์˜ ๊ณ ์งˆ์ ์ธ ๋ฌธ์ œ์ธ NPE (NullPointer Exception) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

 

  • ์ฆ‰, Optional ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ Null ๊ฐ’์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค!

 

(2) Optional ํด๋ž˜์Šค

  • Optional ํด๋ž˜์Šค๋Š” Integer๋‚˜ Double ํด๋ž˜์Šค์ฒ˜๋Ÿผ โ€œTโ€ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ํฌ์žฅํ•ด์ฃผ๋Š” ๋ž˜ํผ ํด๋ž˜์Šค (Wrapper Class)๋กœ, Optional ์ธ์Šคํ„ด์Šค๋Š” ๋ชจ๋“  ํƒ€์ž…์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • ๊ธฐ์กด์—๋Š” NPE ์˜ˆ์™ธ๋ฅผ ๋ณต์žกํ•œ ์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด ์ฒ˜๋ฆฌํ–ˆ์ง€๋งŒ Optional ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ œ๊ณต๋˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํžˆ ํšŒํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • ๊ทธ๋Ÿผ ์ด์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด Optional ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ดํ•ดํ•ด๋ณด์ž!

 

(3) Optional ๊ฐ์ฒด ์ƒ์„ฑ

  • Optional ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” ํฌ๊ฒŒ of(), ofNullable(), empty() ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋‹ค.

 

โ‘  Optional.of()

  • null์ด ์•„๋‹Œ ๋ช…์‹œ๋œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” Optional ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Optional<String> hello = Optional.of("Hello World!!");

โ†’ OK!

Optional<Object> nullTest = Optional.of(null);

โ†’ NPE ์˜ˆ์™ธ ๋ฐœ์ƒ!!
  • of() ๋ฉ”์†Œ๋“œ ์•ˆ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ null ๊ฐ’์„ ์ฃผ๊ฒŒ ๋˜๋ฉด NPE ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

  • ์ฆ‰, null ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ null ๊ฐ’์ด ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์˜ ofNullable() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

โ‘ก Optional.ofNullable()

  • ๋ช…์‹œ๋œ ๊ฐ’์ด null์ด ์•„๋‹ˆ๋ฉด ๋ช…์‹œ๋œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” Optional ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ๋ช…์‹œ๋œ ๊ฐ’์ด null ์ด๋ฉด ๋น„์–ด์žˆ๋Š” Optional ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Optional<String> hello = Optional.ofNullable("Hello World!!");
Optional<Object> nullTest = Optional.ofNullable(null);

 

โ‘ข Optional.empty()

  • ์•„๋ฌด๋Ÿฐ ๊ฐ’๋„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ๋น„์–ด์žˆ๋Š” Optional ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, of() ๋ฉ”์†Œ๋“œ์™€ ๋‹ค๋ฅธ ์ ์€ ์ฐธ์กฐํ•˜๋”๋ผ๋„ NPE ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
Optional<Object> emptyTest = Optional.empty();

โ†’ Optional.ofNullable(null) == Optional.empty()

 

(4) Optional ๊ฐ์ฒด ์‚ฌ์šฉ

 

โ‘  get()

  • Optional ๊ฐ์ฒด์— ์ €์žฅ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Optional<String> hello = Optional.ofNullable("Hello World!!");
String s = hello.get();

โ†’ ์ฐธ์กฐ๋ณ€์ˆ˜ s ์—๋Š” "Hello World!!" ๊ฐ€ ์ €์žฅ๋œ๋‹ค.

Optional<Object> nullTest = Optional.ofNullable(null);
Object o = nullTest.get();

โ†’ NoSuchElement Exception ๋ฐœ์ƒ
  • get() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด Optional ๊ฐ์ฒด์— ์ €์žฅ๋œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ ์ž ํ•  ๋•Œ, ๊ฐ’์ด null ์ด๋ฉด NoSuchElementException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์˜ orElse() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋Œ€์ฒดํ•  ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • ๊ทธ๋ฆฌ๊ณ  orElse() ๋ฉ”์†Œ๋“œ์˜ ๋ณ€ํ˜•์œผ๋กœ null์„ ๋Œ€์ฒดํ•  ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋žŒ๋‹ค์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” orElseGet() ๋ฉ”์†Œ๋“œ์™€ null์ผ ๋•Œ, ์ง€์ •๋œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” orElseThrow() ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋‹ค.

 

โ‘ก orElse()

  • Optional ๊ฐ์ฒด์— ์ €์žฅ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ null์ด ์ €์žฅ๋œ ๊ฒฝ์šฐ์—๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
[์ฝ”๋“œ]
Optional<String> hello = Optional.ofNullable("Hello World!!");
String s = hello.orElse("๊ธฐ๋ณธ๊ฐ’");
System.out.println(s);

Optional<Object> nullTest = Optional.ofNullable(null);
Object o = nullTest.orElse("๊ธฐ๋ณธ๊ฐ’");
System.out.println(o);

[๊ฒฐ๊ณผ]
Hello World!!
๊ธฐ๋ณธ๊ฐ’
  • ์ถ”๊ฐ€์ ์œผ๋กœ orElse() ๋ฉ”์†Œ๋“œ๋Š” ์‚ฌ์šฉํ•  ๋•Œ, ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋Š”๋ฐ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋„๋ก ํ•˜์ž!
[์ฝ”๋“œ]
class OrElse {
        public static int sequence = 0;

        OrElse() {
            ++sequence;
            System.out.println(sequence + "๋ฒˆ์จฐ OrElse ๊ฐ์ฒด ์ƒ์„ฑ!!!");
        }
}    

public class Test {
        public static void main(String[] args) {
            OrElse orElse = new OrElse();
            Optional<OrElse> first = Optional.ofNullable(orElse);
            OrElse test = first.orElse(new OrElse());
        }
}

[๊ฒฐ๊ณผ]
1๋ฒˆ์จฐ OrElse ๊ฐ์ฒด ์ƒ์„ฑ!!!
2๋ฒˆ์จฐ OrElse ๊ฐ์ฒด ์ƒ์„ฑ!!!
  • orElse() ๋ฉ”์†Œ๋“œ๋Š” ์œ„ ์ฝ”๋“œ ๊ฒฐ๊ณผ์ฒ˜๋Ÿผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋‚ด์šฉ์„ ๊ฐ’์ด ์žˆ๋“  ์—†๋“  ๋ฌด์กฐ๊ฑด ์‹คํ–‰๋œ๋‹ค.

 

  • ๋”ฐ๋ผ์„œ, orElse() ๋ฉ”์†Œ๋“œ ๋ณด๋‹ค๋Š” ์•„๋ž˜์˜ orElseGet() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž!

 

โ‘ข orElseGet()

  • Optional ๊ฐ์ฒด์— ์ €์žฅ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ null์ด ์ €์žฅ๋œ ๊ฒฝ์šฐ์—๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ ๋žŒ๋‹ค์‹์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
[์ฝ”๋“œ]
class OrElse {
        public static int sequence = 0;

        OrElse() {
            ++sequence;
            System.out.println(sequence + "๋ฒˆ์จฐ OrElse ๊ฐ์ฒด ์ƒ์„ฑ!!!");
        }
}    

public class Test {
        public static void main(String[] args) {
            OrElse orElse = new OrElse();
            Optional<OrElse> first = Optional.ofNullable(orElse);
            OrElse test = first.orElseGet(() -> {
                    return new OrElse();
            });
        }
}

[๊ฒฐ๊ณผ]
1๋ฒˆ์จฐ OrElse ๊ฐ์ฒด ์ƒ์„ฑ!!!

 

โ‘ฃ orElseThrow()

  • Optional ๊ฐ์ฒด์— ์ €์žฅ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ null์ด ์ €์žฅ๋œ ๊ฒฝ์šฐ์—๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
Optional<String> hello = Optional.ofNullable(null);

String s = hello.orElseThrow(() -> {
    throw new IllegalArgumentException();
});

 

โ‘ค isPresent()

  • Optional ๊ฐ์ฒด์— ์ €์žฅ๋œ ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , null์ด ์ €์žฅ๋œ ๊ฒฝ์šฐ์—๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
[์ฝ”๋“œ]
Optional<String> True = Optional.ofNullable("hello");
Optional<String> False = Optional.ofNullable(null);

System.out.println(True.isPresent());
System.out.println(False.isPresent());
[๊ฒฐ๊ณผ]
true
false

 

โ‘ฅ ifPresent()

  • Optional ๊ฐ์ฒด์— ์ €์žฅ๋œ ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋žŒ๋‹ค์‹์„ ์‹คํ–‰ํ•˜๋ฉฐ, null์ด ์ €์žฅ๋œ ๊ฒฝ์šฐ์—๋Š” ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.
Optional<String> True = Optional.ofNullable("hello");
Optional<String> False = Optional.ofNullable(null);

True.ifPresent((data) -> { 
    System.out.println("๊ฐ’์ด ์กด์žฌํ•จ : " + data); 
});

False.ifPresent((data) -> { 
    System.out.println("๊ฐ’์ด ์—†์–ด์„œ ํ•ด๋‹น ๋กœ์ง์€ ์‹คํ–‰๋˜์ง€ ์•Š์Œ"); 
});

โ†’ Optional์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  null ๊ฐ’์„ ์ฒดํฌํ•˜์—ฌ ํŠน์ • ๋กœ์ง์„ ์‹คํ–‰ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์งœ๋ณด์ž!

String s = "hi";

if (s != null) {
    System.out.println("๊ฐ’์ด ์กด์žฌํ•จ : " + s);
}

โ†’ Optional์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ null ๊ฐ’์„ ์ฒดํฌํ•˜๋Š” if๋ฌธ์„ ์จ์ฃผ๊ณ  ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์™ ๋งŒํ•˜๋ฉด Optional์„ ์‚ฌ์šฉํ•ด์„œ ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฝ”๋”ฉํ•˜์ž!

 

(5) ๊ธฐ๋ณธ ํƒ€์ž…์˜ Optional ํด๋ž˜์Šค

  • Java์—์„œ๋Š” ๊ธฐ๋ณธ ํƒ€์ž…์„ ์œ„ํ•œ ๋ณ„๋„์˜ Optional ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

  • ๋งŒ์•ฝ, Optional ๊ฐ์ฒด์— ์ €์žฅ๋˜๋Š” ๊ฐ’์ด int, long, double ์ด๋ผ๋ฉด Auto Boxing / UnBoxing์ด ๋ฐœ์ƒํ•˜๋Š” Optional<\Integer>, Optional<\Long>, Optional<\Double>์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  OptionalInt, OptionalLong, OptionalDouble์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

  • ์ด์ฒ˜๋Ÿผ ๊ธฐ๋ณธ ํƒ€์ž…์„ ์œ„ํ•œ Optional ํด๋ž˜์Šค๋Š” ๋ฐ˜ํ™˜ ํƒ€์ž…์ด Optional<\T> ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ๊ธฐ๋ณธ ํƒ€์ž…์ด๋ผ๋Š” ์‚ฌ์‹ค๋งŒ ์ œ์™ธํ•˜๋ฉด ๊ฑฐ์˜ ๋ชจ๋“  ๋ฉด์—์„œ ๋น„์Šทํ•˜๋‹ค.

 

  • ๋”ฐ๋ผ์„œ, Optional ๊ฐ์ฒด์—์„œ get() ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ๋œ ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํด๋ž˜์Šค ๋ณ„๋กœ ์ €์žฅ๋œ ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž!

 

โ‘  OptionalInt ํด๋ž˜์Šค

OptionalInt optionalInt = OptionalInt.of(100);
int number = optionalInt.getAsInt();
System.out.println(number);

 

โ‘ก OptionalLong ํด๋ž˜์Šค

OptionalLong optionalLong = OptionalLong.of(100L);
long number = optionalLong.getAsLong();
System.out.println(number);

 

โ‘ข OptionalDouble ํด๋ž˜์Šค

OptionalDouble optionalDouble = OptionalDouble.of(3.14);
double number = optionalDouble.getAsDouble();
System.out.println(number);

 

(6) Optional ์‚ฌ์šฉ ์‹œ, ์ฃผ์˜ ์‚ฌํ•ญ

 

โ‘  isPresent() + get() ๋ฉ”์†Œ๋“œ ๋Œ€์‹  orElseGet()์„ ์‚ฌ์šฉํ•œ๋‹ค!

  • ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค!

 

โ‘ก orElse() ๋Œ€์‹  orElseGet()์„ ์‚ฌ์šฉํ•œ๋‹ค!

  • orElse()๋Š” Optional ๊ฐ์ฒด์— ์ €์žฅ๋œ ๊ฐ’์ด ์žˆ๋“  ์—†๋“  ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๋‚ด์šฉ์„ ๋ฌด์กฐ๊ฑด ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

โ‘ข of(), ofNullable() ํ˜ผ๋™ํ•˜์ง€ ๋ง์ž!

 

โ‘ฃ ๊ธฐ๋ณธ ํƒ€์ž…์ด๋ผ๋ฉด Optional<\T> ๋Œ€์‹  OptionalInt, Long, Double ์‚ฌ์šฉํ•˜์ž!

 

โ‘ค Optional ๊ฐ์ฒด๋ฅผ ์ปฌ๋ ‰์…˜์˜ ์›์†Œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž!

 

[Reference]

  • https://ittrue.tistory.com/166?category=958774
  • http://www.tcpschool.com/java/java_stream_optional
  • https://wildeveloperetrain.tistory.com/91
  • https://jdm.kr/blog/234
  • https://docs.oracle.com/javase/8/docs/api/
  • https://bibi6666667.tistory.com/286
 

Java Platform SE 8

 

docs.oracle.com

 

[Java] Optional, Optional์˜ ๋ฉ”์„œ๋“œ, Optional ์‚ฌ์šฉ์‹œ ์ฃผ์˜์‚ฌํ•ญ

Optional Optional ์˜ต์…”๋„ : ''๊ฐ์ฒด''๊ฐ€ null์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. Optional byId = userRepository.findById(id); โ†“ User user = userRepository.findById(id).orElseGet(User::new); ๋žŒ๋‹ค๋ฅผ ๋ฉ”์„œ๋“œ์ฐธ์กฐ๋กœ ๋ฐ”๊พธ๊ธฐ () -> n

bibi6666667.tistory.com

 

์ž๋ฐ” ์˜ต์…”๋„ (Java Optional) :: JDM's Blog

๊ฐœ์š” ์ž๋ฐ” ์˜ต์…”๋„Java Optional์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ์ž๋ฐ” 8๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด 9, 10๊นŒ์ง€ ์ถ”๊ฐ€๋œ ์˜ต์…”๋„ ๋ฉ”์„œ๋“œ๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. Java 8 Optional ์ž๋ฐ” ์˜ต์…”๋„์€ ์ž๋ฐ” 8์—์„œ ์ตœ์ดˆ๋กœ ๋„์ž… ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋„์ž…์ด ๋œ ์ด์œ ๋Š”

jdm.kr

 

Java Optional Class ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด

java.util.Optional (Java8๋ถ€ํ„ฐ ๋„์ž…) 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 itsel

wildeveloperetrain.tistory.com

 

์ฝ”๋”ฉ๊ต์œก ํ‹ฐ์”จํ”ผ์Šค์ฟจ

4์ฐจ์‚ฐ์—…ํ˜๋ช…, ์ฝ”๋”ฉ๊ต์œก, ์†Œํ”„ํŠธ์›จ์–ด๊ต์œก, ์ฝ”๋”ฉ๊ธฐ์ดˆ, SW์ฝ”๋”ฉ, ๊ธฐ์ดˆ์ฝ”๋”ฉ๋ถ€ํ„ฐ ์ž๋ฐ” ํŒŒ์ด์ฌ ๋“ฑ

tcpschool.com

 

[Java] ์ž๋ฐ” ์˜ต์…”๋„(Optional) ๊ฐœ๋… ์ •๋ฆฌ ๋ฐ ํ™œ์šฉ

Optional ์˜ต์…”๋„(Optional)์€ NPE(NullPointerException) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. ์ฆ‰, null ๊ฐ’์œผ๋กœ ์ธํ•ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์„ ํšจ์œจ์ ์œผ๋กœ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ Optional์— ๋‹ด์•„์„œ ๋ฐ˜

ittrue.tistory.com

 

๋ฐ˜์‘ํ˜•

'๐Ÿง Programming > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

IntelliJ ์ธ์ฝ”๋”ฉ ์„ค์ •  (0) 2023.08.18
์ œ๋„ค๋ฆญ (5) - ๊ณต๋ณ€์„ฑ, ๋ฐ˜๊ณต๋ณ€์„ฑ, ๋ฌด๊ณต๋ณ€์„ฑ  (0) 2023.07.25
์ œ๋„ค๋ฆญ (4) - ์ œํ•œ๋œ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ  (0) 2023.07.23
์ œ๋„ค๋ฆญ (3) - ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค์™€ ์ œ๋„ค๋ฆญ ๋ฉ”์†Œ๋“œ  (0) 2023.07.22
์ œ๋„ค๋ฆญ (2) - ์ œ๋„ค๋ฆญ & ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ  (0) 2023.07.22
  1. (1) ๊ฐœ์š”
  2. (2) Optional ํด๋ž˜์Šค
  3. (3) Optional ๊ฐ์ฒด ์ƒ์„ฑ
  4. โ‘  Optional.of()
  5. โ‘ก Optional.ofNullable()
  6. โ‘ข Optional.empty()
  7. (4) Optional ๊ฐ์ฒด ์‚ฌ์šฉ
  8. โ‘  get()
  9. โ‘ก orElse()
  10. โ‘ข orElseGet()
  11. โ‘ฃ orElseThrow()
  12. โ‘ค isPresent()
  13. โ‘ฅ ifPresent()
  14. (5) ๊ธฐ๋ณธ ํƒ€์ž…์˜ Optional ํด๋ž˜์Šค
  15. โ‘  OptionalInt ํด๋ž˜์Šค
  16. โ‘ก OptionalLong ํด๋ž˜์Šค
  17. โ‘ข OptionalDouble ํด๋ž˜์Šค
  18. (6) Optional ์‚ฌ์šฉ ์‹œ, ์ฃผ์˜ ์‚ฌํ•ญ
  19. โ‘  isPresent() + get() ๋ฉ”์†Œ๋“œ ๋Œ€์‹  orElseGet()์„ ์‚ฌ์šฉํ•œ๋‹ค!
  20. โ‘ก orElse() ๋Œ€์‹  orElseGet()์„ ์‚ฌ์šฉํ•œ๋‹ค!
  21. โ‘ข of(), ofNullable() ํ˜ผ๋™ํ•˜์ง€ ๋ง์ž!
  22. โ‘ฃ ๊ธฐ๋ณธ ํƒ€์ž…์ด๋ผ๋ฉด Optional<\T> ๋Œ€์‹  OptionalInt, Long, Double ์‚ฌ์šฉํ•˜์ž!
  23. โ‘ค Optional ๊ฐ์ฒด๋ฅผ ์ปฌ๋ ‰์…˜์˜ ์›์†Œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž!
'๐Ÿง Programming/Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • IntelliJ ์ธ์ฝ”๋”ฉ ์„ค์ •
  • ์ œ๋„ค๋ฆญ (5) - ๊ณต๋ณ€์„ฑ, ๋ฐ˜๊ณต๋ณ€์„ฑ, ๋ฌด๊ณต๋ณ€์„ฑ
  • ์ œ๋„ค๋ฆญ (4) - ์ œํ•œ๋œ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ
  • ์ œ๋„ค๋ฆญ (3) - ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค์™€ ์ œ๋„ค๋ฆญ ๋ฉ”์†Œ๋“œ
KR_DEV
KR_DEV
๊ณต๋ถ€์šฉ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค. :)
๋ฐ˜์‘ํ˜•
KR_DEV
All about IT
KR_DEV
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ์ „์ฒด (139)
    • ๐Ÿ“š ์—ฐ์žฌ ์‹œ๋ฆฌ์ฆˆ (19)
      • ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ๋ฉด ์ข‹์„ ๋‚ด์šฉ (11)
      • ์ž์ฃผ ์“ฐ์ด๋Š” IT ์šฉ์–ด ์ •๋ฆฌ (6)
      • ์žก๋‹คํ•œ IT ์ •๋ณด (2)
    • ๐ŸŽฎ Toy Project (1)
    • ๐Ÿ’ฏ Coding Test (35)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…Œ์ŠคํŠธ (14)
      • SQL ํ…Œ์ŠคํŠธ (21)
    • ๐Ÿ’ป Computer Science (14)
      • Hardware (4)
      • Operating System (3)
      • Network (4)
      • Database (3)
      • Data Structures (0)
      • Algorithms (0)
    • ๐ŸŒ Front End (0)
      • HTML5 (0)
      • CSS3 (0)
    • ๐Ÿ‘จโ€๐Ÿ’ป Back End (30)
      • Spring (5)
      • MySQL (12)
      • Redis (3)
      • OOP (0)
      • Design Pattern (0)
      • HTTP (2)
      • Servlet (1)
      • JDBC (7)
      • MSA (0)
    • ๐Ÿ› ๏ธ Devops (12)
      • HAProxy (1)
      • Linux (6)
      • Virtual Machine (4)
      • Container (0)
      • Ansible (1)
    • ๐Ÿง Programming (20)
      • Java (10)
      • Python (10)
    • ๐ŸŒฅ๏ธ Cloud (2)
      • AWS (1)
      • Oracle Cloud (0)
    • ๐Ÿ’พ Storage (5)
      • MiniO (3)
    • ๐Ÿ” Security & Hacking (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

  • ๊ตฌ๊ธ€ ์• ๋“œ์„ผ์Šค ํ†ต๊ณผํ–ˆ๋„ค์š” !!!
  • ์•ˆ๋…•ํ•˜์„ธ์š”.

์ธ๊ธฐ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.2
KR_DEV
Optional<T> ํด๋ž˜์Šค๋ž€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด์ž!
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.