Java annotationProcessor annotation processor는 Java에서 주석(annotation)을 처리하기 위한 툴이다. 자바 컴파일러 플러그인의 일종으로, 컴파일 타임에 어노테이션에 대한 코드베이스를 검사, 수정, 생성하는 역할을 한다. 즉, 어노테이션을 사용하기 위해서는 어노테이션 프로세서가 필요하다. Annotation Processor를 사용하는 과정 1. 사용자는 코드 내에서 주석(annotations)을 사용한다. 이후 사용자는 자바 컴파일러(javac)로 코드를 컴파일하게 된다. 2. 구현: 컴파일러는 소스 코드 내의 어노테이션과 그에 해당하는 어노테이션 프로세서를 찾아 매칭한다. 이를 통해 해당 어노테이션을 처리할 수 있는 어노테이션 프로세서를 실행하게 된다. 주..
stream 의 map map 함수는 Java의 Stream API에서 제공하는 메소드, stream의 각 요소에 주어진 함수를 적용한 후 결과를 새로운 stream으로 반환한다. 기존에 있던 댓글을 가져와서 새로운 댓글로 업데이트 하는 과정을 의식의 흐름대로 작성해보니 이러했다. @Transactional public Comment update(Long commentId, CommentDto request) { // 변경하기전 댓글 객체 조회 Comment original = commentRepository.findById(commentId) .orElseThrow(() -> new BusinessException(ErrorCode.COMMENT_DOES_NOT_EXISTS)); Comment comm..
캡슐화 해서 객체 생성하는 디자인 패턴 객체를 생성하는 대신 객체의 인스턴스를 반환한다. 생성자를 직접 사용하는 것을 제한할 수 있다. 정적 팩토리 메서드(Static Factory Method)란? 정적(static). 팩토리(factory). 메서드(method) 정적 팩토리 메서드란 객체 생성을 담당하는 정적 메서드라는 의미를 가진다. 생성자 대신에 메서드로 객체를 생성하는 방식이다. 정적 팩토리 메서드를 사용하면 좋은 이유? 1. 이름을 지정해서 코드의 가독성이 높아진다. 정적 팩토리 메서드는 목적에 맞게 명확한 이름을 직접 지정할 수 있다. 반면에 생성자는 클래스 이름만 사용하기 때문에, 동일한 클래스에 여러 생성자가 있는 경우 구분하기 어렵다. public class Drink { privat..
추상 클래스와 항상 따라다니는 인터페이스!! 이어서 인터페이스에 대해서 살펴보도록 하겠습니다~! 1. 자바에서 인터페이스가 생겨난 배경 인터페이스도 추상클래스처럼 다른 클래스를 작성하는데 도움을 주는 목적으로 작성하는데 클래스와 다르게 여러개의 인터페이스로부터 다중상속(구현)이 가능하다. 💡 다중상속이 먼가요? 다중 상속을 지원하게 되면 하나의 클래스가 여러 부모 클래스로부터 상속 받을 수 있다. BUT ! 자바는 IS-A 관계(상속관계)로 하나만 상속이 가능하다. 자식 클래스가 여러 부모 클래스를 상속받는다면 다양한 부모 클래스의 메서드를 가져올 수 있어서 좋지 않을까? 싶지만 부모의 메서드 중 동일한 메서드가 있다면 자손에서 충돌나는 문제를 방지하기 위해서 자바에서는 다중 상속을 지원하지 않는다. 이..
추상클래스-실체클래스를 외우려니까 이름처럼 너무 추상적이어서 ^^ 이해하기 어려웠는데 그림처럼 흐름을 그리면서 생각하니까 이해가 아주 쏙쏙 되었다. 같이 흐름대로 이해해보아요! 1. 추상클래스는 무엇일까? 💇🏻♀️ 클래스.... 항상 만드는게 클래스라서 단어는 아주 익숙하다. 일단 클래스는 일반 클래스와 추상 클래스로 나뉜다. 추상클래스는 A클래스, B클래스, C클래스, ..... 수많은 클래스들 중 "비슷한 필드와 메서드를 공통적으로 추출해" 만들어진 클래스다. 클래스 구현부 내부에 추상 메서드가 하나 이상 포함되거나 abstract로 정의된 경우를 말한다. 처음부터 이론적으로 접근하니까 너무 어렵다. 쉽게 설명하자면! 게임을 처음 시작하면 게임 캐릭터를 먼저 만들면서 시작하게 된다. 보통 게임에서 ..
1. 이차원 배열 선언하기 2차원 배열은 [ ] (대괄호)를 두 번 사용하여 선언함! 첫 번째 대괄호에는 [세로 크기=행], 두 번째 대괄호에는 [가로 크기=열]를 지정한다. *일반적으로 2차원 공간은 가로x세로로 표기하지만, 배열로 만들 때는 세로x가로로 표기한다.* 자료형 배열이름[][]; 자료형[] 배열이름[]; 자료형[][] 배열이름; int arr1[세로][가로]; int[세로] arr2[가로]; int[세로][가로] arr3; 2. 이차원 배열 할당 (크기 지정) 행크기와 열크기 동시에 지정 가능함! 배열이름 = new 자료형[행크기][열크기]; arr3 = new int[2][3]; 3. 2차원 배열을 선언하면서 초기화도 같이 할 수 있다. { } (중괄호)안에 가로 요소들을 먼저 묶어주고,..
변수 대신 배열을 쓰는 이유가 뭘까? 변수는 "자료형의 값 하나만"을 담을 수 있고, 예를들어 int a = 10; a = 20; 배열은 "자료형의 값 여러개"를 담을 수 있는 개념이다. int[] a = new int[3]; 여러개의 데이터를 담을 때를 대비해서 배열을 만들었다! (= 세개의 상자를 만들래!) 여기에 [0] [1] [2] 상자마다 번호가 생성된다. a[0] = 5; a[1] = 10; a[2] = 15; 여기서, 변수 대신 배열을 쓰는 이유! 변수는 일일히 매번 선언해야 하는 번거로움과, 여러개의 변수 선언은 오류가 날 가능성이 매우 높은 문제가 있다. int num1 = 0; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; 또, 변수..
배분율을 계산하는 식이 있다. double dividend1 = income * 0.5; double dividend1 = income * 0.3; double dividend1 = income * 0.2; 각 사람당 배분율 = 수입 * 비율 double rate1 = 0.5; double rate2 = 0.3; double rate3 = 0.2; double dividend1 = income * rate1; double dividend2 = income * rate2; double dividend3 = income * rate3; 변수를 먼저 선언해서 각각의 사람의 권리를 변수화시킨다. 그런데 코드가 길어지면서 변수가 많아질수록 변수가 더럽혀질 가능성이 높아진다. 이럴 때 배열을 이용해보자 새롭게 변수..
- Total
- Today
- Yesterday
- spring boot 3
- Java
- JPA
- ChatGPT
- FetchJoin
- java.lang.NullPointerException: Parameter specified as non-null is null
- 배열
- insertOne
- Linux
- array
- Kotlin
- 문자열계산기
- document insert
- 스프링오류
- Git
- checkout
- Cannot construct instance of
- port
- junit5
- insertMany
- MongoDB
- MultipleBagFetchException
- QueryDSL
- 추상클래스
- n+1
- addFilterBefore
- dto 클래스 생성자
- 장애 대응
- ?.let
- Spring Security
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |