일급 컬렉션 First-Class Collection일급 컬렉션은 컬렉션을 하나의 클래스로 감싸고 컬렉션 자체를 하나의 객체로 다루는 것을 의미한다. 즉 클래스에 컬렉션만 필드로 하나를 가지는 것! 일급(First-Class)이라는 용어는1.컬렉션을 단일 객체로 취급하고,2.컬렉션을 사용한 비즈니스 로직 관리와 데이터 무결성을 지키려는 의도를 가지고 있다. 일급 컬렉션을 사용하는 이유1. 책임 분리컬렉션과 관련된 로직을 일급 컬렉션 내부로 캡슐화해서 데이터 관련된 로직을 한곳에서 관리할 수 있다.컬렉션과 관련된 로직을 일급 컬렉션에 위임할 수 있게 된다. 학생 데이터를 가지는 Student 클래스가 있다고 가정하자.이 때, 전체 학생을 관리하기 위해서 학생 리스트 컬렉션을 만들 수 있다. 그렇다면 전체 ..
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; 또, 변수..
- Total
- Today
- Yesterday
- 추상클래스
- MongoDB
- QueryDSL
- MultipleBagFetchException
- spring boot 3
- Spring Security
- FetchJoin
- n+1
- array
- addFilterBefore
- Cannot construct instance of
- Kotlin
- 오블완
- checkout
- 배열
- 티스토리챌린지
- 스프링 스케줄링
- Git
- bucket4j
- ChatGPT
- 스프링오류
- dto 클래스 생성자
- Java
- 자바 어플리케이션 실행 과정
- junit5
- port
- JPA
- jvm warm-up 전략
- redisson 분산락
- Linux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |