2019. 4. 25. 14:23ㆍ[개발] 기록
Java 에서 가장 골치덩어리였던게 null point exception. 대부분의 에러는 NullPointException에서 나는 경우가 많다. 그래서 개발자들은 null을 처리해주기 위해서 if (myObject == null) 과같이 조건문을 만들고 분기를 태워줘야 했었다. 이렇게 처리된 코드는 보기도 흉했고 가독성도 떨어졌고, null 처리 로직이 들어가는 것 자체가 코드를 길게 하는 요인이였다. 이러한 문제 때문에 클린 코드에서는 가능하면 메소드가 null 을 리턴하지 말도록 권장했다. 클린 코드는 차라리 null 값보다 Empty 객체를 리턴하라고 말한다.
https://kok202.tistory.com/25?category=785883
java.util.Optional 은 이러한 문제를 해결함과 동시에 클린코드에서 말한 권장사항도 동시에 지킬 수 있는 굉장히 유용한 솔루션인다.
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Member {
private int id = -1;
private String name = "[Nothing]";
}
public class Main{
private ArrayList<Member> members;
public static void main(String[] args){
Main main = new Main();
Member memberA = main.findMember(0).orElse(new Member());
Member memberB = main.findMember(1).orElse(new Member());
Member memberC = main.findMember(2).orElse(new Member());
Member memberD = main.findMember(3).orElse(new Member());
System.out.println(memberA);
System.out.println(memberB);
System.out.println(memberC);
System.out.println(memberD);
}
public Main(){
members = new ArrayList<Member>();
members.add(new Member(0,"kok202"));
members.add(new Member(1,"brandon"));
members.add(new Member(2,"testMember"));
}
public Optional<Member> findMember(int id){
for(Member member : members){
if(member.getId() == id)
return Optional.of(member);
}
return Optional.empty();
}
}
결과
Member(id=0, name=kok202)
Member(id=1, name=brandon)
Member(id=2, name=testMember)
Member(id=-1, name=[Nothing])
Optional.orElse 메소드를 통해 메소드가 empty optional 을 리턴받을 경우 에대한 로직을 처리해줄 수 있다. 위의 경우 빈객체를 받아오도록했다. 이외에도 Optional.orElseThrow로 empty optional 을 리턴받을 경우 Exception을 던질 수 있다.
참고 : Swift (ios 프로그래밍 언어) 에서는 nil 을 사용하여 참조하고 있는 객체가 null 이 될 수 있음을 나타냈다.
'[개발] 기록' 카테고리의 다른 글
자바 8 Stream (0) | 2019.06.06 |
---|---|
자바의 병렬 처리 발전사 (0) | 2019.05.03 |
Reactive connection with DB (0) | 2019.04.18 |
Lombok을 사용할 때 List 타입 멤버변수 오버라이딩 (0) | 2019.04.16 |
Jackson Error - InvalidDefinitionException: Direct self-reference leading to cycle (0) | 2019.04.16 |