null 처리 때문에 도입되었습니다.import java.util.Optional;
public class Main {
public static void main(String[] args) {
String hello = "안녕하세요.";
// Optional 객체를 통해 감싼다.
Optional<String> optionalValue = Optional.ofNullable(hello);
// .isPresent() : 값이 존재하는지 확인
if (optionalValue.isPresent()) {
System.out.println(optionalValue.get());
} else {
System.out.println("값이 존재하지 않습니다.");
}
}
}
📍
Optional.ofNullable(값):
인자로 전달되는 값이 null 일경우Optional객체가 빈 (Empty) 상태가 되고,null이 아닐경우 값을 가지는Optional객체를 생성합니다.
📍.ifPresent():
객체에 값이 존재하는지 확인하는 메소드 입니다.
Optional<String> result = Optional.ofNullable(null);
System.out.println(result); // 출력: Optional.empty
위에서 정리한 글을 참고하면 될것같습니다.
Optional<String> temp = Optional.empty();
System.out.println(temp.orElse(null)); // 출력: null
📍
.orElse(값):.orElse()메소드는null을 전달하는 경우에는 Optional객체는 null을 갖게 됩니다.
🚩 Optional 객체를 사용시의 장점
( Spring 에서 많이 사용 )
📌
NPE (NullPointException)을 방지
Optional은null값을 다루기 때문에 적절한 대안을 처리할수 있습니다. ( 예외를 던질수도 있음 )
📌 코드 가독성 개선
null체크 대신 값의 존재 여부를 쉽게 확인할수 있고 의미를 정확하게 드러낼수 있습니다.
👀 Java에서는 주로 System.out.print()를 사용하여 콘솔에 직접 출력을 했지만, Spring 에서는 Log(로그) 를 사용하여 출력과 관련된 작업을 수행합니다.
▶ Spring에서는
@Slf4j라는 Lombok 라이브러리가 제공하는 어노테이션을 주로 사용하여 작성합니다.
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Slf4j
@Controller
public class ExamLog {
@RequestMapping("/")
@ResponseBody
public String logExample() {
String message = "로그 예제 메시지 입니다.";
log.trace("TRACE log message: {}", message);
log.debug("DEBUG log message: {}", message);
log.info("INFO log message: {}", message);
log.warn("WARN log message: {}", message);
log.error("ERROR log message: {}", message);
return "hello";
}
}
http://localhost:8080/URL로 접속시 로그가 편하게 말해 찍히게 됩니다.
- 로그는 다음과 같이 날짜 , 중요도 , 발생한 위치 , 내용 순으로 찍힙니다.
➡ 로그의 5가지 중요도 (레벨)
1. Trace
2. Debug
3. Info : 요청 메시지 발생
4. Warn : 해당 로그가 찍히면 엄청 심각하지는 않은 메시지
5. Error : 해당 로그가 찍히면 서버가 에러가 발생했다는 심각한 메시지
➡ 위의 출력 결과중 Info, Warn, Error만 출력되는 이유 ❓
Spring은 기본적으로 Info, Warn, Error를 찍어주며,
properties 혹은 yml을 수정하여 Trace와 Debug도 찍을수 있지만 추천하지않는다.
왜냐하면 Spring이 기본으로 지원하는 라이브러리에 Trace와 Debug
로그가 엄청 많습니다.
log는 발생한 위치, 내용 순으로 알려줘서 버그나 오류를 신속하게 추적할수 있습니다.
( 엄청난 장점, 실무에서는log를 무조건 사용한다고 생각 )- 로그를 살펴보며 발생한 이벤트를 빠르게 파악할수 있습니다.