우아한테크코스/prolog
스프링은 왜 쓸까? (feat. 끝장토론)
브리의 명강의 끝자락에 갑자기 끝장토론이 개최됐다. 생각조차 안 해본 주제였다. 아직 스프링 입문 단계라 사용법을 익히느라 급급했는데 정작 중요한 부분을 놓치고 있었다. '그래서 스프링을 왜 써야 할까? 쓰면 뭐가 좋을까?' 저 위의 질문은 결국 스프링을 사용해야 하는 이유를 풀어서 해석한 것과 같다고 느껴졌다. 브리께서 나같이 스프링 사용의 목적도 모르고 따라가기 급급한 스린이들에게 가장 중요한 내용을 환기시켜 주고자 이런 질문을 던진 것 같다. 체스 미션에서 어떤 객체를 스프링 빈으로 만들었나요? 이번 미션에서 @Repository, @Service, @Controller를 사용해 DAO, Service, Controller 클래스를 Spring Bean으로 등록했다. 추가로, jdbc와 securi..
Servlet이란?
스프링을 이용해 미션 진행 중 client에서 오는 요청을 처리하기 위한 url을 매핑할 때 Spring의 @RequestMapping이라는 어노테이션을 사용했다. 매핑 과정이 궁금해 공부하던 중 DispatcherServlet이라는 것이 관여하고 있다는 것을 알게 되었고 그것의 전신인 Servlet이라는 것에 대해 공부해보았다. Servlet 이란? 서블릿이란 클라이언트의 요청을 처리하고, 그 결과를 반환하는 동적인 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 웹에선 Http message를 통해 요청과 응답을 주고 받게 되는데, 이 과정에서 소켓 열고 닫기, Http 요청 메세지 파싱하기, 비지니스 로직 수행, Http 응답 메세지 생성 등 수많은 과정이 필요하다...
함수형 인터페이스의 위력(?)
로또 미션 도중 순위를 Enum class로 표현하는 중 문제가 발생했다. public enum Rank { NOTHING(0, 0, false), FIFTH(5_000, 3, false), FOURTH(50_000, 4, false), THIRD(150_000, 5, false), SECOND(30_000_000, 5, true), FIRST(2_000_000_000, 6, false); private final int money; private final int matchCounts; private final boolean isBonus; Rank(int money, int matchCounts, boolean isBonus) { this.money = money; this.matchCounts = ..
래퍼 클래스와 오토 박싱 & 언박싱
자동차 경주 미션을 진행하는 도중 최대로 멀리간 position의 값을 구하기 위해 아래와 같은 method를 사용하였다. private int getFarthestPosition() { return cars.stream() .map(Car::getPosition) .max(Integer::compare) .orElse(-1); } 리뷰어께서 이에 대해 불필요한 unboxing과 boxing 과정이 있다고 피드백을 주셨다. unboxing과 boxing을 대충 무엇인지는 알고있었지만 이번 기회에 제대로 알아보기로 했다! 래퍼 클래스(Wrapper class) 자바의 자료형은 기본 타입(Primitive type)과 참조형 타입(Reference Type) 으로 나뉜다. 기본 타입 : int, long, ..