개발 177

[Effective Java] Item 3. private 생성자나 열거 타입으로 싱글턴임을 보증해라

[Effective Java] Item 3. private 생성자나 열거 타입으로 싱글턴임을 보증해라 예시 public class Elvis { private static final Elvis INSTANCE = new Elvis(); private Elvis() { } public static Elvis getInstance() { return INSTANCE; } public void leaveTheBuilding() { System.out.println("Whoa baby, I'm outta here!"); } // This code would normally appear outside the class! public static void main(String[] args) { Elvis e..

[Effective Java] Item 2. 생성자에 매개변수가 많다면 빌더를 고려해라

[Effective Java] Item 2. 생성자에 매개변수가 많다면 빌더를 고려해라 예시 NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8) .calories(100).sodium(35).carbohydrate(27).build(); 정적 팩터리와 생성자에는 똑같은 제약이 하나 있다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 식품 포장의 영양 정보를 표현하는 클래스에서 영양 정보는 1회 내용량, 총 2회 제공량, 1회 제공량당 칼로리 같은 필수 항목 몇 개와 총 지방, 트랜스지방, 포화지방, 콜레스테롤, 나트륨 등 총 20개가 넘는 선택 항목으로 이뤄진다. 그런데 대부분 제품은 이 선택 항목중 대다수의 값이 그냥 0이다. 이..

[Effective Java] Item 1. 생성자 대신 정적 팩터리 메서드를 고려하라

[Effective Java] Item 1. 생성자 대신 정적 팩터리 메서드를 고려하라 예시 public static Boolean valueOf(boolean b){ return b ? Boolean.True : Boolean.False; }클래스는 클라이언트에 public 생성자 대신 (혹은 생성자와 함께) 정적 팩터리 메서드를 제공할 수 있다. 이 방식에는 장점과 단점이 모두 존재한다. 정적 팩터리 메서드의 5가지 장점 이름을 가질 수 있다. (생성자 호출 방식) BigInteger(int, int Random) (정적 팩토리 메서드 호출 방식) BigInteger.probablePrime 위 예시에서 값이 소수인 BigInteger를 반환한다는 의미를 더 잘 설명할 수 있는 것은 정적 팩터리 메서..

[프로그래머스][2019 KAKAO BLIND RECRUITMENT] 길찾기 게임 Level 3 (Java)

알고리즘 [프로그래머스][2019 KAKAO BLIND RECRUITMENT] 길찾기 게임 (Level3 Java) https://programmers.co.kr/learn/courses/30/lessons/42892 코딩테스트 연습 - 길 찾기 게임 [[5,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2]] [[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]] programmers.co.kr 문제 설명 입출력 예시 nodeinfo result [[5,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2]] [[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]] 이진트리의 노드를 ..

개발/알고리즘 2021.01.11

[프로그래머스][월간 코드 챌린지 시즌1] 스타수열 문제 해결 (Java) Level 3

알고리즘 [프로그래머스][월간 코드 챌린지 시즌1] 스타수열 문제 해결 (Java) Level 3 https://programmers.co.kr/learn/courses/30/lessons/70130 코딩테스트 연습 - 스타 수열 programmers.co.kr 문제 설명 스타 수열의 최대 길이 갯수를 구하는 문제입니다. 수열이 {x[0], x[1]}, {x[2], x[3]}, ..., {x[2n-2], x[2n-1]} 라고 가정하자. 이 때 아래 조건을 만족한 수열을 스타 수열이라고 부른다. 스타 수열의 조건1. x의 길이가 2이상의 짝수이다. 스타 수열의 조건2. {x[0], x[1]}, {x[2], x[3]}, ..., {x[2n-2], x[2n-1]}의 교집합의 원소 갯수가 1 이상이다. 스타 수..

개발/알고리즘 2021.01.10

[Spring] DispatcherServlet 코드 분석하기

Spring DispatcherServlet 코드 분석하기 이번 포스팅에서는 Spring Framework의 DispatcherServlet 코드를 분석한 내용에 대해 정리해보려 합니다. DispatcherServlet 이란? Spring Framework의 구조와 Dispatcher Servlet의 역할을 간단히 설명하자면 아래와 같은 순서대로 사용자의 요청을 처리합니다. 1. 사용자의 Request가 들어오면 DispatcherServlet은 받아온 Request를 확인합니다. 2. DispatcherServlet은 HandlerMapping에게 보내서 해당 요청을 처리할 수 있는 Controller가 있는지 확인합니다. 3. HandlerAdapter에서는 HandlerMapping에서 확인한 Co..

개발/Spring 2021.01.01

[Spring] LogBack 설정

Spring LogBack 설정하기 이번 포스팅에서는 LogBack은 무엇인지, 그리고 어떤 설정을 할 수 있는지 자세하게 알아보려 합니다. Logback이란? LogBack은 가장 많이 사용되고 있는 로깅 프레임워크 중 하나입니다. Logback은 이전에 많이 사용되고 있던 Log4j의 대안책으로 나온 slf4j와 그 구현체인데, slf4j는 패시드(Facade)패턴으로 구현체의 종류와 상관없이 일관된 로깅 코드를 작성할 수 있기 때문에 범용적입니다. LogBack의 구성요소로는 Logger, Appender, Encoder 3가지가 있으며 다음과 같은 역할을 합니다. Logger: 실제 로깅을 수행한다. Level 속성으로 출력할 로그의 레벨을 정한다. Appender: 로그 메세지가 출력될 대상을 ..

개발/Spring 2020.12.31

[프로그래머스][2018 KAKAO BLIND RECRUITMENT] 추석 트래픽 (level 3)

문제가 참 어려웠네요. 문제 이해도 쉽고, 풀고 나서 코드는 참 간단한데 구간 내 트래픽을 구할 방법을 못 찾아서 한참 헤매었습니다. Date클래스로 포맷팅 하면 끝날 줄 알았는데 본격적인 문제의 시작은 그다음이더군요. 별의별 생각을 다하다가(밀리세컨드 단위로 늘려야 하나 같은..) 시작점부터 1초까지를 모두 카운트했다가 실패하고, 카카오 해설의 요청량이 변하는 순간은 각 로그의 시작과 끝뿐임을 알 수 있습니다. 이 말을 키포인트로 풀었습니다. Traffic 클래스 startTime, endTime을 Date의 long형식으로 가지고 있고, float로 processTime(작업시간)을 들고 있습니다. Traffic 생성자에서는 parseLog 메서드를 통해 SimpleDateFormat으로 "yyyy-..

개발/알고리즘 2020.12.11

[Spring 프로젝트] Interceptor로 request, response body json 값 로깅하기

Spring Logging (Interceptor로 Request, Response body json 값 로깅하기) 스프링 프로젝트를 하면서 기존에는 LoggingAspect를 만들어서 Aspect파일에서 parameter값과 body값을 찍어주고 있었다. response 값도 찍어주기 위해 여러가지 찾아보면서 공부하던 와중에 Filter와 Interceptor, AOP의 구조를 다시 공부하는데 Interceptor의 인자로 HttpServletRequest, HttpServletResponse가 들어오는 것을 보고 response, request 로그를 Interceptor로 찍어야 하는 것이 맞는 구조라는 것을 그제야 깨달았다. 1. Filter, Interceptor, AOP 구조 아래 갓대희님 블..

개발/Spring 2020.12.09

[Spring 프로젝트] Annotation 동작 원리와 사용법

Annotation 동작 원리와 사용법 Spring Boot를 사용하다 보면 @Component, @Controller, @Repository, @Transactional, @Aspect 등 다양한 어노테이션을 사용하게 된다. 그럼 이런 어노테이션이 실제로는 어떻게 동작하는 것인지, 내가 만약 새로운 어노테이션을 만들어서 사용하고 싶다면 어떻게 하면 되는 것인지에 대해 알아보자. 1. Annotation 이란? 우선 어노테이션 자체는 주석과도 같다. (실제로 번역기를 돌려도 주석으로 나온다.) 즉, 코드 사이에 주석처럼 쓰이면서 특별한 의미, 기능을 수행하도록 하는 기술로 프로그램에게 추가적인 정보를 제공해주는 메타 데이터이다. 2. 어노테이션의 용도 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를..

개발/Spring 2020.12.07