๐Optional์ด๋?
Java 8์์ ์ถ๊ฐ๋ Optional์ null ๊ฐ์ ๋์ ํ ์ ์๋ ์ปจํ ์ด๋ ํด๋์ค์ด๋ค.
Java์์ null์ ๋ง์ ๋ฌธ์ ๋ฅผ ๋ฐ์์ํค๋ ์์ธ ์ค ํ๋์ด๋ค. Optional์ ์ด๋ฌํ null ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋์ ๋์๋ค. Optional ํด๋์ค๋ ๊ฐ์ด ์กด์ฌํ์ง ์์ ์ ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ธ๊ณ ์์ผ๋ฉฐ, ๋ฉ์๋ ์ฒด์ด๋์ ํตํด ๊ฐ์ฒด๋ฅผ ์์ ํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ํ๋ค.
Optional์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ฅผ ํตํด Optional ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ null ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ ํ์๊ฐ ์๋ค.
Optional์ ์ฌ์ฉํ์ฌ NullPointerException์ ๋ฐฉ์งํ๊ณ ์ฝ๋์ ์์ ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ค.
๐งOptional ์ฌ์ฉ ์์
Optional<String> optional = Optional.of("Hello");
System.out.println(optional.get()); // "Hello"
์ ์ฝ๋์์ Optional์ "Hello"๋ผ๋ ๊ฐ์ ๊ฐ์ธ๊ณ ์๋ค. get() ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ Optional ๋ด๋ถ์ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
ํ์ง๋ง ๋ง์ฝ Optional์ด null์ ๊ฐ์ธ๊ณ ์๋ค๋ฉด get() ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์์ธ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ Optional์ ์ฌ์ฉํ ๋๋ isPresent() ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋จผ์ ํ์ธํ๊ณ , ๊ฐ์ด ์กด์ฌํ ๋์๋ง get() ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํ๋ค.
Optional<String> optional = Optional.ofNullable(null);
if (optional.isPresent()) {
System.out.println(optional.get()); // ์์ธ ๋ฐ์
}
Optional์ Java 8 ์ด์์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋๋ถ๋ถ์ ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ Optional์ ์ง์ํ๋ค.
๐Optional ์ํฐํจํด
- get() ๋ฉ์๋๋ฅผ ์ฌ์ฉ
- get() ๋ฉ์๋๋ Optional ๊ฐ์ฒด์์ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ค. ํ์ง๋ง Optional ๊ฐ์ฒด์ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ, get() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด NoSuchElementException์ ๋ฐ์์ํจ๋ค. ๋ฐ๋ผ์ get() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ํญ์ isPresent() ๋ฉ์๋๋ก ๊ฐ์ ํ์ธํด์ผ ํ๋ค.
- null ๊ฐ์ ๋์ ํ์ฌ Optional์ ์ฌ์ฉ
- Optional์ null ๊ฐ์ ๋์ ํ์ฌ ์ฌ์ฉ๋ ์ ์์ง๋ง, ๊ทธ ์์ฒด๋ก null-safe ํ์ง ์๋ค. ์ฆ, Optional ๊ฐ์ฒด๊ฐ null์ด ์๋๋ผ๋ฉด ๊ฐ์ด ์๋ ๊ฒ์ด์ง๋ง, Optional ๊ฐ์ฒด๊ฐ null์ธ ๊ฒฝ์ฐ NullPointerException์ด ๋ฐ์ํ๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ, null-check๋ฅผ ๋์ฒดํ๊ธฐ ์ํด Optional์ ์ฌ์ฉํ๋ ๊ฒ์ ์ํฐํจํด์ผ๋ก ์์ฉํ๋ค.
- Optional์ ์ง๋์น๊ฒ ๋จ์ฉํ๋ ๊ฒ
- ๋ชจ๋ ๋ฉ์๋์ ๋ฐํ๊ฐ์ Optional๋ก ๊ฐ์ธ๋ฉด ์ฝ๋๊ฐ ์ง๋์น๊ฒ ๋ณต์กํด์ง๊ณ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง ์ ์๋ค. Optional์ ๊ฐ์ด ์์ ์ ์๋ ์ํฉ์์ ์ฌ์ฉ๋์ด์ผ ํ๋ฉฐ, ๊ฐ์ด ํ์คํ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ์ผ๋ฐ์ ์ธ ๋ฐํ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.