본문 바로가기

전체 글

(235)
[Spring MVC] DispatcherServlet 에서 발생하는 다양한 에러 핸들링하기 최근 타 결제 서비스와 결제 연동 작업을 하다가 해당 서비스가 요구하는 스펙에 맞추어 API 응답을 보내줘야 하는 경우가 생겼습니다. 외부 결제 서비스가 명시해놓은 고려해야 하는 예외 상황이 올바르지 않은 HTTP 메서드올바르지 않은 media type올바르지 않은 url path등이 있어서, 이러한 상황에서 발생하는 예외들을 처리해주는 CustomExceptionHandler 를 만들기로 했습니다. 다만 이미 GlobalExceptionHandler가 프로젝트 내에 존재했고, 해당 서비스에 한해서만 스펙을 맞춰서 응답하면 됐기 때문에 ControllerAdvice 애너테이션에 basePackages를 설정해주었습니다. package com.yoon1fe.api.xxx.controller;@RestCon..
[우선순위 큐] 703. Kth Largest Element in a Stream 문제 바로가기 정수로 이루어진 스트림에서 k번째로 큰 숫자를 찾는 문제입니다. KthLargest 클래스의 생성자와,  add() 메서드를 구현하면 됩니다. class KthLargest { private PriorityQueue minHeap; int k; public KthLargest(int k, int[] nums) { minHeap = new PriorityQueue(); this.k = k; for (int num : nums) { add(num); } } public int add(int val) { if (minHeap.size()  이 문제의 핵심은 우선순위 큐(최소 힙)을 활용하는 것입니다. add() 메서드가 호출될 때마다 매개변수로 들어오..
[Prefix Sum(Product)] 238. Product of Array Except Self 문제 바로가기 배열이 주어졌을 때 본인(nums[i])을 제외한 나머지 원소들의 곱을 구하는 문제입니다. 배열 원소를 모두 곱하고 각 자리에 있는 애로 나누면 되겠다 싶었는데 그러지 말랍니다. 문제에서 요구하는 접근법이 따로 있나 봅니다. Java class Solution { public int[] productExceptSelf(int[] nums) { int n = nums.length; int[] answer = new int[n]; // prefix int prefixProduct = 1; for (int i = 0; i < n; i++) { answer[i] = prefixProduct; prefixProduct *= nums[i]; } // suffix int suffixProduct = 1..
[Java] Arrays.asList() 의 비밀 자바의 java.util.Arrays 클래스는 배열을 다루는 유용한 메서드들을 제공하는 클래스입니다. sort(), copyOf(), equals(), deepEquals(), fill() 등 여러 static 메서드가 포함되어 있습니다. 오늘은 이 중에서 배열을 List 로 변환해주는 asList() 메서드의 비밀에 대해 알아봅시다. asList() 메서드의 구현은 아래와 같습니다. @SafeVarargs @SuppressWarnings("varargs") public static List asList(T... a) { return new ArrayList(a); } 보기엔 별 특이한 점이 없는 것 같은데요, 여기에는 아주 무시무시한 비밀이 숨겨져 있습니다.. 바로… 리턴하는 ArrayList 클래스가..
[Greedy/우선순위 큐] 1642. Furthest Building You Can Reach 문제 바로가기 Furthest Building You Can Reach - LeetCode Can you solve this real interview question? Furthest Building You Can Reach - You are given an integer array heights representing the heights of buildings, some bricks, and some ladders. You start your journey from building 0 and move to the next building leetcode.com 미디엄 문제긴 한데 꽤 간단합니다. 빌딩을 타 넘어야 되는데요, 벽돌과 사다리의 개수를 고려해서 최대한 많이 타 넘어가야 합니다. 우선순위 ..
[Spring] 스프링의 다양한 의존관계 주입 방식 (+ 생성자 주입을 권장하는 이유) 스프링 프레임워크에서 의존 관계 주입(Dependency Injection, DI)이란 스프링 컨테이너에서 객체 빈(Spring bean)을 생성해 두고, 생성한 객체를 필요한 객체에 주입하는 방식을 말합니다. 객체 자체가 코드 상에서 객체 생성에 관여하지 않아도 되기 때문에 객체 사이의 의존성을 낮출 수 있습니다. 의존 관계 주입을 사용하면 유연하고 확장성이 뛰어난 코드가 되는 것이죠. 스프링의 의존 관계 주입 방법에는 크게 세 가지 방법이 있습니다. 필드 주입 수정자 주입 (setter 주입) 생성자 주입 오늘은 이 세 방법에 대해 알아보고, 의존 관계 주입 시 생성자 주입을 권장하는 이유를 알아보겠습니다. 필드 주입 @Service public class MyService { @Autowired p..
2023 회고 및 2024 목표 새해가 밝았습니다. 밝은 지는 쫌 되긴 했는데요, 요새 너무 바빠서 이제야 회고를 끄적여봅니다. 사실 그리 바쁘지 않았어도 미뤘을 것 같긴 합니다. 그래도 쓰는게 어딥니까? 올림픽 정신으로 회고 작성 그 자체에 의의를 두고.. 2023년 한 해를 정리하고 2024년 새해의 목표를 세우는 시간을 가져보겠습니다. 올해는 건강, 취미, 일 요렇게 세 가지 주제로 정리하고자 합니다. 관계는 뭐 갖다버린건 아니고 딱히 적을 게 없어서 ^^~~ 건강 22년 11월부터 헬스를 시작해서 재미도 붙고 근육도 붙어감에 따라 일주일에 4~5번 정도 꾸준히 다녔었는데요, 아마 인생 최장 기간동안 꾸준히 한 운동이 아니었나 싶습니다. 23년 목표글에서 말했던 꾸준함을 유지해서 제 자신에게 칭찬 스티커를 주고 싶어요. 다만 최근..
[Java] Optional 때려 뿌수기 Optional 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)입니다. 이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 피할 수 있습니다. 즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게 됩니다. 오늘은 이러한 Optional 을 여러 주제로 정리해보겠습니다. 1. Optional.of() vs Optional.ofNullable() 먼저 of() 메서드와 ofNullable() 의 코드를 봅시다. /** * Returns an {@code Optional} describing the given non-{@code null}..