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..
kotlin 함수 ?.null { it } where 조건 안에서 특정 파라미터 값을 체크해 데이터 유무에 따라 사용할 수 있다. fun findByIdAndName(id: Long, name:String): List { return from(members) .where(members.id.eq(id), name?.let { members.name.eq(it) }) .fetch() } 코틀린에서 제공하는 함수를 queryDsl 쿼리문 안에서도 사용 가능하다. ?. : null 이 아닐 때 let { } : it 으로 자기 자신을 받아와서 객체의 상태를 변경할 수 있다. ?.let { null이 아닐 때 블럭을 실행한다. }
Enum 클래스를 만들고, Entity의 해당하는 컬럼을 Enum클래스로 type 변경 enum class BookType { COMPUTER, ECONOMY, SOCIETY, LANGUAGE, SCIENCE, } //val type: String, val type: BookType, 컬럼에 Enum 타입을 지정해주지 않으면? 디비에 0, 1, 2,... 처럼 순서대로 숫자 데이터가 들어간다. 문제점 1. 기존 Enum 의 순서가 바뀌면 치명적인 오류가 발생할 수 있다.! 2. 기존 Enum 타입의 삭제, 추가가 제한적이라 유지보수에 좋지 못하다. @Enumerated(EnumType.STRING) 타입을 지정하면, (여기서는 STRING 으로 지정한다.) 지정된 타입으로 Enum class의 데이터가 ..
@Entity class User( var name: String, ) { fun updateName(name: String) { this.name = name } } - 생성자 안의 var property 로 name 생성 - setter 대신 함수를 만들어 update name (var property) name setter가 public 으로 열려있지만, 함수를 이용하는 것이 클린하다. 이유? 1. 함수의 이름으로 명시적으로 사용 가능 2. 여러가지 property를 한번에 업데이트 가능 setter를 private하게 만드는 법 1. backing property (_name) class User( private var _name: String ) { val name: String get() = ..
각각의 테스트를 실행하면 성공하지만, 전체 테스트를 돌리면 실패하는 이유? : Spring Context 를 공유하기 때문 //Expected size: 2 but was: 3 in: //[com.group.libraryapp.dto.user.response.UserResponse@69862a1, // com.group.libraryapp.dto.user.response.UserResponse@585718dd, // com.group.libraryapp.dto.user.response.UserResponse@5a644d75] //java.lang.AssertionError: 생성 테스트 - 조회 테스트 1. 최초 생성 테스트 : DB에 user 데이터 1명 추가 @Test fun saveUserTest(..
추상 클래스와 항상 따라다니는 인터페이스!! 이어서 인터페이스에 대해서 살펴보도록 하겠습니다~! 1. 자바에서 인터페이스가 생겨난 배경 인터페이스도 추상클래스처럼 다른 클래스를 작성하는데 도움을 주는 목적으로 작성하는데 클래스와 다르게 여러개의 인터페이스로부터 다중상속(구현)이 가능하다. 💡 다중상속이 먼가요? 다중 상속을 지원하게 되면 하나의 클래스가 여러 부모 클래스로부터 상속 받을 수 있다. BUT ! 자바는 IS-A 관계(상속관계)로 하나만 상속이 가능하다. 자식 클래스가 여러 부모 클래스를 상속받는다면 다양한 부모 클래스의 메서드를 가져올 수 있어서 좋지 않을까? 싶지만 부모의 메서드 중 동일한 메서드가 있다면 자손에서 충돌나는 문제를 방지하기 위해서 자바에서는 다중 상속을 지원하지 않는다. 이..
- Total
- Today
- Yesterday
- Cannot construct instance of
- port
- insertOne
- MultipleBagFetchException
- 배열
- 문자열계산기
- QueryDSL
- checkout
- addFilterBefore
- 추상클래스
- insertMany
- n+1
- array
- dto 클래스 생성자
- Linux
- 스프링오류
- MongoDB
- document insert
- JPA
- junit5
- 장애 대응
- ChatGPT
- Kotlin
- spring boot 3
- Java
- FetchJoin
- ?.let
- java.lang.NullPointerException: Parameter specified as non-null is null
- Git
- 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 |