[Java] Optional의 Best Practice
·
Java/Optional
옵셔널이 안정성은 높지만, 그렇다고 무분별하게 쓰면 가독성과 유지보수가 구려진다.옵셔널이 왜 생겼는지 근본을 생각해보자. 제일 큰 이유는 null 여부의 명확성 + NPE 방지를 위해 등장한 개념이다.즉, 우리는 이 옵셔널을 웬만하면 반환값에 사용하도록 해야한다.Optional 의 베스트 프랙티스1. 반환 타입으로 사용 , 필드엔 쓰지 말자옵셔널은 메서드의 반환 값에 대해 값이 없을 수도 있다를 표현하기 위해 등장했기 때문에, 필드에 직접 옵셔널을 두는 것은 권장되지 않는다.private Optional name; -> 이런식으로 쓰지말고public Optional getNameWithOptional(){ return Optional.ofNullable(name)} -> 이런식으로 값을 반환할 때 쓰자옵..
[Java] orElse() 와 orElseGet() & 즉시평가 vs 지연평가
·
Java/Optional
orElse()와 orElseGet() 을 비교해보자. 비슷한것 같지만 다르다.먼저 즉시평가와 지연평가에 대해 알아보자.즉시 평가 vs 지연 평가즉시 평가는 값을 바로 생성하거나 계산하는 것이고, 지연 평가는 값이 실제로 필요할 때까지 연산을 미뤘다가 필요시점에 연산하는 방법이다.로그를 예로 들어 즉시 평가와 지연평가 예시를 보자.log.info("로그를 쓰는 방법이 개같군요 당신의 이름은 = " + name); -> 이게 즋기평가이다. log.info("로그를 쓰는 방법이 적절하군요 당신의 이름은 = {}", name); -> 이게 지연평가이다. 즉시 평가자바는 기본적으로 연산을 즉시 평가한다. 즉, 10+20 이라는 연산을 처리할 순서가 되면 즉시 평가한다.이게 왜 문제가 될까?만약 우리가 미리 e..
[Java] Optional과 생성, 값 획득 및 처리
·
Java/Optional
Optional 이란 무엇이냐옵셔널은 위와 같이 클래스가 정의 되어 있는데, T타입의 value를 감싸는 일종의 컨테이너라고 생각하면 된다.위험한 null을 직접 다루는 대신 Optional을 통해 null을 안전하게 핸들링하며 값이 없을 때는 Optional.empty() 를 반환하고, 값이 있다면 Optional.of(value)를 통해 값을 한번 감싼 상태로 관리한다. 값이 없을 수 있다는 점을 명시적으로 표현하여 NPE를 예방할 수 있고, 내 코드를 읽는 모두가 이 메서드는 NULL을 반환할 수도 있다는 사실을 알 수 있어 오류를 줄일 수 있다.요약하자면, 값이 없을 수도 있는 상황에 주로 사용하고, 항상 값이 있다면 굳이 Optional을 사용하여 리소스를 쓰기보단 바로 해당 타입을 사용하거나 ..
[Java] Optional이 필요한 이유
·
Java/Optional
미친 Null의 역습세상에서 가장 무서운 예외가 있다.그건 바로 객체가 제대로 전달되지 않아 null.메서드() 형태로 코드 흐름을 가져가버리는 NullPointerException이다. 자바에서 null == 값이 비었다를 의미하는데, 존재하지 않는 값에 대고 메서드를 호출하면 null.XX() 형태로 코드가 만들어지기에 프로그램이 예기치 않게 종료될 수 있다.만약 다음과 같이 코드를 작성했다고 했을때를 가정해보자.아직 null은 아니지만 언젠가는 null이 될 객체.method1().method2().method3()....methodN();시작은 null이 아니더라도, 중간에 널포인터예외가 발생하면 메서드 체이닝 중 어느 메서드에서 발생한 버그인지 찾기가 쉽지가 않다.또한 모든 메서드별로 if(ob..