Java
@Controller vs @RestController
@Controller Spring 3에서 주로 사용하던 어노테이션이다. 컨트롤러에 붙여서 사용하며, 뷰(페이지)를 리턴한다. @ResponseBody를 붙이면 JSON이나 XML과 같은 데이터 형식으로도 리턴 가능하다. 실행 흐름은 아래와 같다. 1. DispatcherServlet으로 클라이언트의 요청이 들어온다. 2. DispatcherServlet은 *HandlerMapping을 이용해 요청을 처리할 컨트롤러를 찾는다. 3. 컨트롤러는 적절한 작업을 수행하고, *ModelAndView 객체를 DispatcherServlet으로 리턴한다. 4. DispatcherServlet은 ModelAndView 객체를 *ViewResolver로 보내 사이트에 표시할 페이지를 찾는다. 5. 페이지에 모델 객체를 ..
Garbage Collection
오늘은 자바의 Garbage Collection에 대해 정리해보려 한다. 자바는 메모리 해제를 위해 Garbage Collection(GC)을 사용한다. GC로 인해 개발자는 메모리 해제를 신경쓰지 않아도 되며, 명시적으로 메모리를 해제하려 하면 오히려 성능의 저하를 불러오게 된다. GC는 아래와 같은 두 개의 가정 하에 만들어졌다. 1. 대부분의 객체는 곧 접근 불가능한 상태가 된다. 2. 오래된 객체에서 새로운 객체로의 참조는 거의 일어나지 않는다. 이러한 가설을 weak generational hypothesis라 하며, 이에 따라 자바의 hotspot GM은 매번 힙의 모든 영역을 검사하지 않고 일부 영역만 검사할 수 있도록 힙을 세 개의 영역으로 나누고, 영역에 따라 Minor GC와 Major..
Optional 클래스
최근 Java spring을 배우면서, Optional이란 클래스를 자주 접했다. Null 값을 처리하기 위해서 사용하는 클래스라는 설명은 들었지만, 정확히 어떤 기능을 하는 지 알면 좋을 것 같아 블로그 글로 정리하기로 했다. Optional Optional 클래스는 자바 8부터 도입된 클래스이다. 이 클래스의 목적은 객체 호출 도중 발생하는 null 값을 보다 간단히 처리하기 위해서인데, 기존에는 객체가 null값인지 확인하기 위해 아래와 같은 if문을 사용해야 했다. import java.util.*; import java.lang.*; import java.io.*; class Apple{ public String eat(){ return "냠냠"; } } class Test{ public sta..