11.1 ๊ฐ์ด ์๋ ์ํฉ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊น?
public class Person {
private Car car;
public Car getCar(){ return car;}
}
public class Car {
private Insurance insurance;
public Insurance getInsurance(){ return insurance;}
}
public class Insurance{
private String name;
public String getName(){ return name;}
}
์์ ๊ฐ์ด ์๋์ฐจ์ ์๋์ฐจ ๋ณดํ์ ๊ฐ๊ณ ์๋ ์ฌ๋ ๊ฐ์ฒด๋ฅผ ์ค์ฒฉ ๊ตฌ์กฐ๋ก ๊ตฌํํ๋ค๊ณ ํ์.
public String getCarInsurance(Person person){
return person.getCar().getInsurance().getName();
}
- ์ฐจ๋ฅผ ์์ ํ์ง ์์ ์ฌ๋์ด ์์ง๋ง getCar์ ํธ์ถํ๋ฉด
- person์ด null์ด๋ผ๋ฉด
- getInsurance๊ฐ null์ ๋ฐํํ๋ค๋ฉด
11.1.1 ๋ณด์์ ์ธ ์์ธ๋ก NullPointerException ์ค์ด๊ธฐ
NullPointerException์ ํผํ๊ธฐ ์ํด์..
null ํ์ธ ์ฝ๋๋ฅผ ์ถ๊ฐ
if (person != null) {
Car car = person.getCar();
if (car != null) {
...
๋ฐ๋ณต ํจํด ์ฝ๋๋ฅผ ๊น์ ์์ฌ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ฝ๋์ ๊ตฌ์กฐ๊ฐ ์๋ง์ด๋๊ณ ๊ฐ๋ ์ฑ๋ ๋จ์ด์ง๋ค.
if (person == null) {
return "Unknown"
}
Car car = person.getCar();
if (car == null){
...
์ ์ฒ๋ผ ์กฐ๊ธ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก if ๋ธ๋ก์ ์์ ๊ณ null ๋ณ์๊ฐ ์์ผ๋ฉด ์ฆ์ "Unknown"์ ๋ฐํํ๋ค.
ํ์ง๋ง ์ถ๊ตฌ๊ฐ ๋ง์์ ธ ์ ์ง๋ณด์์ ์ด๋ ค์์ด ์๋ค.
11.1.2 null ๋๋ฌธ์ ๋ฐ์ํ๋ ๋ฌธ์
- ์๋ฌ์ ๊ทผ์์ด๋ค.
- ์ฝ๋๋ฅผ ์ด์ง๋ฝํ๋ค.
- ์๋ฌด ์๋ฏธ๊ฐ ์๋ค.
- ์๋ฐ์ ์ฒ ํ์ ์๋ฐฐ๋๋ค - ๋ชจ๋ ํฌ์ธํฐ๋ฅผ ์จ๊ฒผ์ง๋ง nullํฌ์ธํฐ๋ ์์ธ๋ค.
- ํ์ ์์คํ ์ ๊ตฌ๋ฉ์ ๋ง๋ ๋ค. - null์ด ์ด๋ค ์๋ฏธ๋ก ์ฌ์ฉ๋์๋์ง ์ ์ ์๋ค.
11.2 Optional ํด๋์ค ์๊ฐ
java.util.Optional<T> ๋ผ๋ ์๋ก์ด ํด๋์ค ์ ๊ณตํ๋ค.
Optional์ ์ ํํ ๊ฐ์ ์บก์ํํ๋ ํด๋์ค์ด๋ค.
๊ฐ์ด ์์ผ๋ฉด Optional ํด๋์ค๋ ๊ฐ์ ๊ฐ์ผ๋ค.
๋ฐ๋ฉด ๊ฐ์ด ์์ผ๋ฉด Optional.empty ๋ฉ์๋๋ก Optional์ ๋ฐํํ๋ค.
Optional.empty๋ Optional์ ํน๋ณํ ์ฑ๊ธํด ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ค.
public class Person {
// ์ฌ๋์ด ์ฐจ๋ฅผ ์์ ํ์ ์๋, ์์ ํ์ง ์์์ ์๋ ์์ผ๋ฏ๋ก Optional์ ์
private Optional<Car> car;
public Optional<Car> getCar(){ return car;}
}
public class Car {
// ์๋์ฐจ๊ฐ ๋ณดํ์ ๊ฐ์
๋์ด ์์ ์๋ ์๋ ์ ๋ ์์ผ๋ฏ๋ก
private Optional<Insurance> insurance;
public Optional<Insurance> getInsurance(){ return insurance;}
}
public class Insurance{
// ๋ณดํํ์ฌ์๋ ๋ฐ๋์ ์ด๋ฆ์ด ์๋ค.
private String name;
public String getName(){ return name;}
}
11.3 Optional ์ ์ฉ ํจํด
11.3.1 Optional ๊ฐ์ฒด ๋ง๋ค๊ธฐ
- ๋น Optional
Optional<Car> optCar = Optional.empty();
- null์ด ์๋ ๊ฐ์ผ๋ก Optional ๋ง๋ค๊ธฐ
Optional.of๋ก null์ด ์๋ ๊ฐ์ ํฌํจํ๋ Optional์ ๋ง๋ค ์ ์๋ค.
Optional<Car> optCar = Optional.of(car);
car๊ฐ null์ด๋ผ๋ฉด ์ฆ์ NullPointerException ๋ฐ์
- null๊ฐ์ผ๋ก Optional ๋ง๋ค๊ธฐ
Optional<Car> optCar = Optional.ofNullable(car);
car์ด null์ด๋ฉด ๋น Optional ๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ค.
11.3.2 ๋งต์ผ๋ก Optional์ ๊ฐ์ ์ถ์ถํ๊ณ ๋ฐํํ๊ธฐ
์ด๋ฆ ์ ๋ณด์ ์ ๊ทผํ๊ธฐ ์ ์ insurance๊ฐ null์ธ์ง ํ์ธํด์ผ ํ๋ค.
Optional์ map ๋ฉ์๋๋ฅผ ์ง์ํ๋ค.
Optional<Insurance> optInsurance = Optional,.ofNullable(insurance);
Optional<String> name = optInsurance.map(Insurance::getName);
'๐ > JAVA Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2019.08.31 day07 ํญ๊ณต์ฌ ์๋น์ค AMS ( AmsField, AmsMain) (0) | 2019.10.04 |
---|---|
2019.08.31 day07 ์์ฑ์, ์ค๋ฒ ๋ก๋ฉ (Car , Road) (0) | 2019.10.01 |
eclipse ๋จ์ถํค๋ ์์๋๋ฉด ์ข์ ๋ ์๋ค~ (0) | 2019.09.21 |