| ๊ตฌ๋ถ | null ๋ฐฉ์ | Optional ๋ฐฉ์ |
|---|---|---|
| ์ฅ์ | - ๊ฐ๋จํ๊ณ ์ง๊ด์ - ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ์ | - null ์ฒดํฌ๋ฅผ ๊ฐ์ ํ ์ ์์ - ์ฝ๋์ ์๋๊ฐ ๋ช ํํจ - NullPointerException ๋ฐฉ์ง |
| ๋จ์ | - NullPointerException ๋ฐ์ ๊ฐ๋ฅ - null ์ฒดํฌ๋ฅผ ์๋์ผ๋ก ํด์ผ ํจ | - ์ฝ๋๊ฐ ๋ค์ ๋ณต์กํด์ง ์ ์์ - ์ฝ๊ฐ์ ์ฑ๋ฅ ์ค๋ฒํค๋ |
| ์ ํฉํ ์ํฉ | - ๊ฐ๋จํ null ์ฒดํฌ - ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ | - ๋ณต์กํ null ์ฒ๋ฆฌ - API ์ค๊ณ ์ - ์์ ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ |
// ์ํํ null ์ฌ์ฉ
String name = user.getName(); // name์ด null์ด๋ฉด ๋ฐ๋ก NPE
// ์์ ํ Optional
Optional<String> name = user.getOptionalName();
name.ifPresent(System.out::println);
Optional<String> name = Optional.of("Seobin");
Optional<String> empty = Optional.empty();
Optional<String> maybeNull = Optional.ofNullable(null);
Optional<String> nickname = Optional.of("Yun");
//
if (!nickname.isEmpty()) {
String newNickname = nickname.get();
}
// ๊ฐ์ด ์์ผ๋ฉด ์ถ๋ ฅ
nickname.ifPresent(System.out::println);
// ๊ธฐ๋ณธ๊ฐ ์ ๊ณต
String result = nickname.orElse("๊ธฐ๋ณธ ๋๋ค์");
// ์์ธ ๋์ง๊ธฐ
String value = nickname.orElseThrow(() -> new IllegalArgumentException("๊ฐ์ด ์์ด์"));
Optional<User> user = findUserById(id);
String city = user
.map(User::getAddress)
.map(Address::getCity)
.orElse("๊ธฐ๋ณธ ๋์");
| ๊ตฌ๋ถ | ๊ถ์ฅ ์ฌ๋ถ | ์ด์ |
|---|---|---|
| ๋ฆฌํด ํ์ ์ ์ฌ์ฉ | โ | ํธ์ถ์์๊ฒ '์์' ๊ฐ๋ฅ์ฑ์ ๋ช ์ํจ |
| ํ๋ผ๋ฏธํฐ์ ์ฌ์ฉ | โ | ํธ์ถ์์๊ฒ ํผ๋, ์คํ๋ ค if-check ๋ ํ์ |
| ์ํฐํฐ ํ๋ | โ | ORM ๋งคํ, ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฑ ๋ฌธ์ |
| ์ธ๋ถ API ์๋ต ๊ฐ๊ณต | โ | ๊ฐ์ด ์์ ์ ์์์ ํํํ๊ธฐ ์ข์ |