멋사 Backend 30일차 🦁 JAVA 특강

신재원·2023년 5월 31일

📢 Java

Optional

  • Java 8 버전부터 추가로 지원하는 메소드 기능입니다.
  • 도입된 이유는 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 반환

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) 을 방지
Optionalnull 값을 다루기 때문에 적절한 대안을 처리할수 있습니다. ( 예외를 던질수도 있음 )
📌 코드 가독성 개선
null 체크 대신 값의 존재 여부를 쉽게 확인할수 있고 의미를 정확하게 드러낼수 있습니다.

🍀 Spring

  • Spring은 자바 기반의 프레임 워크입니다.

Log (로그)

👀 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의 장점

  • print 문과 달리 log 는 발생한 위치, 내용 순으로 알려줘서 버그나 오류를 신속하게 추적할수 있습니다.
    ( 엄청난 장점, 실무에서는 log 를 무조건 사용한다고 생각 )
  • 로그를 살펴보며 발생한 이벤트를 빠르게 파악할수 있습니다.

0개의 댓글