Community

๐Ÿ•Š๏ธ ์ž๋ฐ”์—์„œ Optional์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์“ฐ๋Š” ๋ฒ•

๋‹น์‹ ์ด ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ–ˆ๋“ ์ง€, NullPointerException(์ดํ•˜ NPE)์€ ๊ฐ€์žฅ ๋‹ต๋‹ตํ•œ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Optional ํด๋ž˜์Šค๋Š” NPE ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฐ” 8๋ถ€ํ„ฐ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. java.util.Optional ํด๋ž˜์Šค์˜ ๋ชฉ์ ์€ null์ผ ์ˆ˜ ์žˆ๋Š” T ํƒ€์ž…์˜ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์•ˆ์ „ํ•œ ๋Œ€์•ˆ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. optional ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ด…์‹œ๋‹ค. ๐Ÿ“Œ Empty Optional Optional.empty()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น„์–ด ์žˆ๋Š” optional ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ Nullable Optional Optional.ofNullable() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ nullable optional ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋Š” null์ด๊ฑฐ๋‚˜ null ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ Non-Nullable Optional Optional.of() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ null์ด ์•„๋‹Œ optional ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Optional ํด๋ž˜์Šค์— ์กด์žฌํ•˜๋Š” get() ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค๋ฉด ๊ทธ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ NoSuchElementException ์˜ˆ์™ธ๋ฅผ ๋˜์ง‘๋‹ˆ๋‹ค. ๋Œ€์‹ ์— isPresent() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ boolean ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ๋ฒ•์€, !=null์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋ณ„๋ฐ˜ ๋‹ค๋ฅด์ง€ ์•Š์•„ ๋ณด์ž…๋‹ˆ๋‹ค. ``` if(optionalWallet.isPresent()){ savings.add(optionalWallet.get().getMoney()); } ``` ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด, ifPresent() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ``` optionalWallet.ifPresent(wallet -> savings.add(wallet.getMoney())); ``` ๊ฐ’์ด ๋น„์–ด์žˆ์„ ๋•Œ ๊ธฐ๋ณธ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. orElse() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ต์…˜์ด null์ผ ๋•Œ ๋Œ€์ฒด ๊ฐ’์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” orElseGet() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ๊ฐ’์„ ๊ณ„์‚ฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ``` Wallet wallet = optionalWallet.orElse(new Wallet(0)); ``` ์ง€๊ธˆ๊นŒ์ง€ ์ž๋ฐ”์—์„œ Optional์„ ์‚ฌ์šฉํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค