์ด ํฌ์คํธ๋
๋ชจ๋ ์๋ฐ ์ธ ์ก์ , (ํ๋น๋ฏธ๋์ด)
์ฑ ์ ๋ด์ฉ์ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์์ต๋๋ค
์๋ฐ์์ ๊ฐ์ฅ ๋ง์ด ๋ง๋๋ ์ค๋ฅ ์ค ํ๋๋ NullPointerException ์ค๋ฅ์
๋๋ค.
null์ด๋ผ๋ ์กด์ฌ๊ฐ ์๋ฐ์์ ๋ถ๋ฌ์ผ์ผํค๋ ๋ฌธ์ ๋ ์๋นํ ๋ง์๋ฐ ๋ํ์ ์ผ๋ก๋
์ด๋ฌํ ๋ฌธ์ ๋ค์ ํฌํจํ๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ Java8์์๋ ์ด๋ฌํ null
์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
ํ์ค์ผ, ์ค์นผ๋ผ ๋ฑ์ ์ํฅ์ ๋ฐ์ java.util.Optional<T>
๋ผ๋ ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค์ด
๋์
ํ์ต๋๋ค.
Optional
์ <T>
์์ ๋ณผ ์ ์๋ฏ์ด, ์ด๋ ํ ์ธ์คํด์ค๋ฅผ ๊ฐ์ธ์ฃผ๋ Wrapper Class
์
๋๋ค.
์ฆ null
๊ฐ์ด ๋ค์ด๊ฐ ์ ์๋ ๊ฐ์ฒด๋ฅผ Optional
๋ก ๊ฐ์ธ์ฃผ์ด null
์ ๋์ฒํ๋ ๊ฐ๋
์
๋๋ค.
public class Person {
private Optional<Car> car;
public Optional<Car> getCar() {
return car;
}
}
๋ค์๊ณผ ๊ฐ์ด Person์ด๋ผ๋ ๊ฐ์ฒด๋, car๋ฅผ ์์ ํ๊ณ ์์์๋ ์๋์๋ ์๊ธฐ ๋๋ฌธ์
car์๋ null๊ฐ์ด ๋ค์ด๊ฐ ์ํ์ฑ์ด ์กด์ฌํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ์ Car๋ฅผ Optional๋ก ๊ฐ์ธ
์ ์ธํ๋ ๋ฐฉ์์ผ๋ก Optional์ ์ ์ฉ์ํฌ ์ ์์ต๋๋ค.
Optional์ ์ธ ๊ฐ์ง ์์ฑ์ ๋ฐฉ์์ผ๋ก Optional ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
// ๋น์ด์๋ Optional
Optional<Car> optCar = Optional.empty();
// null์ด ์๋ ๊ฐ์ผ๋ก
Optional<Car> optCar = Optional.of(car);
// null ๊ฐ์ผ๋ก
Optional<Car> optCar = Optional.ofNullable(car);
๋ค์๊ณผ ๊ฐ์ด Optional์ ์์ฑ์์ ๋น ๊ฐ์ฒด, ๊ฐ ํ ๋น, null ๊ฐ ์ธ ๊ฐ์ง์ ๋ฐฉ๋ฒ์ผ๋ก
Optional์ ์์ฑ ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋ผ ์ด์ Optional๋ก ๋ฉํ๋ ๊ฐ์ฒด์ ๋ํด์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ณ์ต๋๋ค.
Optional์๋ ifPresent( ) ๋ผ๋ ํจ์๊ฐ ์กด์ฌํฉ๋๋ค. ์ด ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ํ๋ผ๋ฏธํฐ๋ก
ํจ์์ ๋์์ ๋๊ฒจ์ฃผ๋ฉด, null์ด ์๋ ๊ฐ์ด ๋ค์ด์์ ๋ ํด๋น ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์
ํจ์์ ๋์์ ์คํํฉ๋๋ค.
ํ์ง๋ง null์ด ๋ค์ด์๋ ๊ฒฝ์ฐ์๋ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค. ์ฆ ์ด๋ฌํ ๋ฐฉ์์
์ฌ์ฉํ๋ฉด null Check๋ฅผ ๋ฐ๋ก ํด์ค ํ์๊ฐ ์์ด ์ฝ๋์ ๊ฐ๋
์ฑ์ด ํฅ์๋ฉ๋๋ค.
๋ฌผ๋ก Optional์๋ get ํจ์๊ฐ ์กด์ฌํ๊ณ ๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ ์ ์์ง๋ง get( )์
๊ฐ์ฒด๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด NoSuchElementException์ ๋ฐ์์์ผ ์ค์ง์ ์ผ๋ก
null ์ค์ฒฉ์ ํ์ธํ๋๊ฒ๊ณผ ๋ค๋ฅด์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
orElse( ) ํจ์๋ Optional์ ๊ฐ์ด ์กด์ฌํ์ง ์์ ๋, default ๊ฐ์ ๋๊ฒจ์ค ์ ์๋๋ก
๊ฐ์ฒด๊ฐ null์ธ ๊ฒฝ์ฐ์ ๋๋นํ์ฌ ๊ธฐ๋ณธ์ ์ธ ๋์ ๋๋ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
orElseGet( ) ํจ์๋ orElse์ ๋น์ทํ์ง๋ง Optional์ด null์ธ ๊ฒฝ์ฐ์๋ง
ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ ์คํํฉ๋๋ค.
orElseThrow( ) ํจ์๋ null์ธ ๊ฒฝ์ฐ์ ์์ธ๋ฅผ ๋์ง ์ ์์ผ๋ฉฐ, **๋ฐ์์ํฌ ์์ธ์ ์ข
๋ฅ๋ฅผ
์ง์ ์ค์ ํ ์ ์์ต๋๋ค