IntelliJ IDEA를 이용해 코딩하다보면 변수나 메서드에 어디서 사용되는지 알려주는 usage, 상속 여부를 알려주는 inheritor, 관련 코드에 문제가 있음을 나타내주는 related problem, 작성자를 알려주는 code author등의 힌트를 볼 수 있습니다. 저는 개인적으로 코딩할 때 주석을 잘 사용하는 편은 아니지만 주석과 같이 사용하게 되면 상당히 거슬리기도 합니다. 게다가 git과 관련된 툴을 사용하하면 힌트를 표시하는 부분이 더욱 더 지저분해져서 코드를 보는 가독성이 떨어질 때가 있습니다. 이 외에도 상당히 많은 부분에서 힌트를 제공합니다. 이 중 파라미터 이름을 알려주거나 메서드 체이닝에서 어떤 타입을 반환했는지 바로바로 보여주는 힌트는 같은 라인에 표시되기 때문에 코딩할 때..
JPA에서 @Query 애너테이션을 사용할 때, 일반적으로 @Param 애너테이션을 사용하여 파라미터명과 매핑할 이름을 지정해주어야 합니다. 하지만 다음과 같은 경우에는 @Param을 생략할 수 있습니다. 파라미터명과 매핑할 이름이 동일한 경우 예를 들어, 다음과 같이 파라미터명과 매핑할 이름이 모두 "name"인 경우에는 @Param을 생략할 수 있습니다. @Query("SELECT u FROM User u WHERE u.name = :name") User findByName(String name); 파라미터가 하나인 경우 파라미터가 하나뿐인 경우에는 @Param을 생략할 수 있습니다. 이 경우에는 파라미터명과 매핑할 이름이 자동으로 "0", "1", "2" 등으로 지정됩니다. @Query("SELEC..
Heap pollution은 Java에서 제네릭스를 사용할 때 발생할 수 있는 문제 중 하나입니다. 제네릭스는 타입 안정성을 보장하기 위해 사용되는 기술이지만, 제네릭 타입이 적용된 컬렉션에 잘못된 타입의 객체를 삽입하거나, 타입이 일치하지 않는 객체를 반환하도록 코드가 작성된 경우 발생할 수 있습니다. 이로 인해 컴파일러에서는 오류가 발생하지 않지만, 런타임에서 예기치 않은 동작을 할 수 있습니다. 예를 들어, 다음과 같은 코드가 있다고 가정해 봅시다. List stringList = new ArrayList(); List rawList = stringList; // warning: unchecked conversion rawList.add(1); // heap pollution String s = s..
본문의 글은 오라클 문서를 번역한 글 입니다. Unchecked Exceptions에 관한 논쟁 자바 프로그래밍 언어는 확인되지 않은 예외(RuntimeException, Error 및 그들의 하위 클래스)를 catch하거나 명시하는 것을 메소드에서 요구하지 않기 때문에, 프로그래머들은 UncheckedException만 던지도록 코드를 작성하거나 모든 예외 하위 클래스를 RuntimeException으로 상속하려는 유혹에 빠질 수 있습니다. 이러한 지름길을 사용하면 컴파일러 오류를 걱정하지 않고 예외를 지정하거나 잡지 않고 코드를 작성할 수 있지만, 이는 확인되지 않은 예외를 지정하거나 잡는 요구사항의 의도를 우회하며, 클래스를 사용하는 다른 사람들에게 문제를 일으킬 수 있습니다. 이는 프로그래머에게는..
1. Java에서 c++ 사용하는 방법 2. Client의 직관을 신뢰했을 때 발생하는 일 3. "Good looks sell"은 패션과 소프트웨어에 모두 적용 됩니다. "Good looks sell"은 제품이나 서비스가 잘 보기 좋다면, 더 많은 사람들이 그것을 더 많이 구매하고 사용할 가능성이 높다는 의미입니다. 이는 제품이나 서비스가 시각적으로 매력적이고 눈에 띄는 경우, 소비자들은 더욱 관심을 가지며 제품이나 서비스의 가치를 높게 평가하기 때문입니다. 4. 코드 리뷰를 하는 동안 프로그래머의 심경 변화 5. 왜 아무도 저의 간단한 인터페이스를 이해하지 못하나요? 6. null과 0, undefined 구분하는 방법 7. 자기 성장은 과소평가 되어있다. 8. 분명히 세미콜론은 사탄에 의해 만들어졌을..
자바 프로그래밍을 하다보면 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
- 스프링 부트 애플리케이션
- Spring Data JPA
- Linux
- gRPC
- Spring Boot JPA
- QueryDSL
- Java
- spring boot application
- intellij
- JPA
- proto3
- 함께 자라기
- 스프링부트
- 클린 아키텍처
- Spring Boot Tutorial
- 스프링 부트 튜토리얼
- JSON
- spring boot app
- Jackson
- 스프링 부트
- Spring Boot
- 스프링 부트 회원 가입
- 함께 자라기 후기
- @ManyToOne
- 알고리즘
- leetcode
- spring boot jwt
- r
- 스프링 데이터 jpa
- 헥사고날 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |