자바 프로그래밍을 하다보면 Optional을 파라미터로 전달했을 때 컴파일러가 경고(노란줄)를 표시합니다. (IntelliJ에서는 표시해주는데 다른 IDE는 어떤지 잘 모르겠네요) 경고를 확인하기 위해 간단한 코드를 작성해보면, public void foo(String nullable) { bar(Optional.of(nullable)); } private void bar(Optional s) { // do something } 'Optional' used as type for parameter 's' 바로 이런 내용을 확인할 수 있습니다. 그렇다면 왜 Optional을 파라미터로 전달하면 안 되는 것일까요? 결론부터 말씀드리면 장점보다 단점이 많기 때문입니다. 먼저 장점으로는 전달할 당시에 별 생각 없..
Optional을 사용하다보면 마지막에 orElse() 또는 orElseGet()를 이용해 원래 값을 얻습니다. 그동안 저는 두 메서드의 차이가 단순히 전달해야하는 파라미터의 차이라고 생각했었습니다. 예를 들면 orElse(defaultValue), orElseGet(this::getDefaultValue) (또는 orElseGet(() -> getDefaultValue())) 이런식으로 하나는 값을 전달하고 하나는 구현체를 전달하기 때문에 그냥 적절하게 사용하면 되겠다는 정도로만 생각했었습니다. 그러던 중 테스트 클래스를 작성하다가 mocking을 사용하였는데 정상적으로 동작하지 않았습니다. 본문과 크게 관련 없는 내용(어떤 테스트가 동작하지 않았는지)이라 접어두겠습니다. 테스트 할 클래스는 Servi..
흥미로운 글이 있어 공유합니다. 원글은 여기서 확인할 수 있습니다. 프로그래머를 인터뷰할 때 텍스트 파일에서 단어 빈도를 세는 간단한 프로그램을 코딩하도록 요청합니다. 많은 기술을 테스트하고 몇 가지 후속 질문을 통해 놀라울 정도로 깊이 들어갈 수 있는 좋은 문제입니다. 후속 질문 중 하나는 "귀하의 프로그램에서 성능 병목 현상이 무엇입니까?"입니다. 대부분의 사람들은 "입력 파일에서 읽기"와 같은 말을 합니다. 실제로 성능을 측정해보기 전까지는 모두 같은 생각일 것입니다. 우리 모두 I/O는 느리다고 배웠기 때문입니다. 하지만 더 이상 I/O는 10년전, 20년전만큼 느리지 않습니다. 디스크에서 파일을 순차적으로 읽는 것은 매우 빠르기 때문입니다. 어떤 기기로, 방법으로 테스트했는지는 이 글에서 크게 ..
소스 코드는 여기 있습니다. 문제는 여기 있습니다. Problem You are given an integer array prices where prices[i] is the price of a given stock on the ith day, and an integer k. Find the maximum profit you can achieve. You may complete at most k transactions. Note: You may not engage in multiple transactions simultaneously (i.e., you must sell the stock before you buy again). Example 1: Input: k = 2, prices = [2,4,1] ..
DB에서 물리적으로 데이터를 지우는 것이 아니라 논리적으로 삭제하는 방법이 있습니다. 많이 사용하는 방법 중 하나가 바로 삭제 여부를 판단하는 컬럼을 사용하는 것인데요, 삭제 된 날짜가 존재하면 정확한 삭제 시기를 알 수 있으므로 deleted_at과 같은 컬럼을 사용할 수 있습니다. 하지만 이런 컬럼이 존재할 경우 정상 데이터를 조회하기 위한 모든 쿼리에 where deleted_at is null과 같은 조건절이 필요합니다. 이럴 때 @Where 애너테이션을 활용하면 간단히 해결할 수 있습니다. 먼저 BaseEntity를 생성해줍니다. package io.lcalmsky.wheredemo; import java.time.LocalDateTime; import javax.persistence.Colum..
소스 코드는 여기 있습니다. 문제는 여기 있습니다. Problem You are playing a game that contains multiple characters, and each of the characters has two main properties: attack and defense. You are given a 2D integer array properties where properties[i] = [attacki, defensei] represents the properties of the ith character in the game. A character is said to be weak if any other character has both attack and defense lev..
소스 코드는 여기 있습니다. 문제는 여기 있습니다. Problem Given the root of a binary tree, return the inorder traversal of its nodes' values. Example 1: Input: root = [1,null,2,3] Output: [1,3,2] Example 2: Input: root = [] Output: [] Example 3: Input: root = [1] Output: [1] Constraints: The number of nodes in the tree is in the range [0, 100]. -100 3 순으로, inorder의 경우 1 -> 2 -> 3 순으로, postorder의 경우 1 -> 3 -> 2 순으로 재..
소스 코드는 여기 있습니다. 문제는 여기 있습니다. Problem Given the root of a binary tree, return the preorder traversal of its nodes' values. Example 1: Input: root = [1,null,2,3] Output: [1,2,3] Example 2: Input: root = [] Output: [] Example 3: Input: root = [1] Output: [1] Constraints: The number of nodes in the tree is in the range [0, 100]. -100
소스 코드는 여기 있습니다. 문제는 여기 있습니다. Problem Given the root of a binary tree, return the same tree where every subtree (of the given tree) not containing a 1 has been removed. A subtree of a node node is node plus every node that is a descendant of node. Example 1: Input: root = [1,null,0,0,1] Output: [1,null,0,null,1] Explanation: Only the red nodes satisfy the property "every subtree not containing a ..
소스 코드는 여기 있습니다. 문제는 여기 있습니다. Problem Given an n-ary tree, return the level order traversal of its nodes' values. Nary-Tree input serialization is represented in their level order traversal, each group of children is separated by the null value (See examples). Example 1: Input: root = [1,null,3,2,4,null,5,6] Output: [[1],[3,2,4],[5,6]] Example 2: Input: root = [1,null,2,3,4,5,null,null,6,7,null,8..
- Total
- Today
- Yesterday
- Linux
- 스프링부트
- Spring Boot JPA
- proto3
- 헥사고날 아키텍처
- 스프링 부트 애플리케이션
- 함께 자라기
- intellij
- 스프링 부트 회원 가입
- @ManyToOne
- spring boot app
- Jackson
- 스프링 데이터 jpa
- leetcode
- 알고리즘
- 클린 아키텍처
- gRPC
- QueryDSL
- 스프링 부트
- Spring Data JPA
- 스프링 부트 튜토리얼
- spring boot jwt
- Spring Boot Tutorial
- JPA
- Java
- spring boot application
- r
- JSON
- 함께 자라기 후기
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |