Java40 [Lombok] @Builder.ObtainVia 사용법과 toBuilder 개념 @Builder.ObtainVia https://projectlombok.org/features/Builder @Builder를 사용하여 여러분이 만든 클래스의 인스턴스를 생성하는 빌더를 만들 때 (이것은 메서드에 @Builder를 추가하지 않는 한 항상 해당됩니다), @Builder(toBuilder = true)를 사용하여 이 클래스 내부에 toBuilder()라는 이름의 인스턴스 메서드도 생성할 수 있습니다. 이 메서드는 현재 인스턴스의 모든 값으로 시작하는 새로운 빌더를 만듭니다. 또한 매개변수(생성자 또는 메서드의 경우)나 필드(타입에 @Builder를 사용하는 경우)에 @Builder.ObtainVia 주석을 넣어서 해당 필드/매개변수의 값을 이 인스턴스에서 가져오는 대체 수단을 나타낼 수 있.. JVM/Java 2024. 3. 21. [Java] 반복문 종류 및 특징 (for, while, do-while) 반복문 코드를 반복적으로 실행하고자 할 때 사용하는 구문 반복문 종류 : for, while, do-while for : 반복 횟수를 알고 있을 경우 주로 사용 while : 조건에 따라 반복할 때 주로 사용 for문 반복문의 대표로, 조건식이 참인 동안 주어진 횟수만큼 실행문을 반복 수행한다. 구문 for ( 초기화 ; 조건식 ; 증감식 ) { // 실행 코드 } for(int i = 0; i < 10; i ++) { System.out.println(i); } 구조 초기화 : 반복할 변수의 초기값을 설정한다 조건식 : 반복할 조건식으로 true 라면 실행문을, false 라면 실행하지 않고 반복문을 벗어난다 증감식 : 반복할 변수를 더하거나, 빼는 등의 수행 방식을 설정하여 반복 횟수를 결정한다 En.. JVM/Java 2023. 11. 7. [Spring] @Valid 와 @Validated 활용한 유효성 검증 (Feat. Custom Valid Annotation 생성) 부제 : Java Bean Validation 과 Spring Framework Validation Validation의 정확한 동작 방식을 모른채, Validation Annotation 생성하여 해결하려다 원하는 대로 동작하지 않아 결국 유효성 검증 동작 방식을 찾아보게 되었다. 관련해서 동일한 난관에 부딪혔을 때 참고하면 좋을 것 같아 남긴다. 문제 상황 동일한 클래스에 대해 제약조건이 다른 경우 필자의 경우, 하나의 클래스에서 제약조건이 다른 경우 보다는 상속 관계를 가진 부모-자식 객체에서 동일한 필드에 대한 제약조건이 다른 경우였다. 결론에 언급하겠지만, 현 게시글의 해결책은 하나의 클래스에 대해 제약조건 설정하는 경우에 더 적합하긴 하다. 요구 사항 부모 객체 name 필드는 NotNull .. JVM/Spring 2023. 10. 4. [JUnit] 소개 - 6. MockMVC 란 ? MockMVC 테스트 코드를 작성하지 않은 경우, 포스트맨 등의 도구를 사용해 직접 호출해 서버를 디버깅해야하는데 MockMVC를 사용하면 이 과정을 건너뛸 수 있다 쉽게 말해, 웹 애플리케이션을 애플리케이션 서버에 배포하지 않고도 스프링 MVC의 동작을 재현하여 컨트롤러를 호출해주는 클래스이다. import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest @AutoConfigureMockMvc MockMVC Method 요약 method 설명 perform 요청 전송 시 사용 .. JVM/JUnit 2023. 9. 30. [Java] 문자열, 객체, 배열 Null Check StringUtils org.apache.commons.lang3.StringUtils 요약 Empty : Null, 공백문자("") Blank : Null, 공백문자(""), whitespace(" ") Empty StringUtils.isEmpty : Null 혹은 공백문자("") 이면 true 값 반환 StringUtils.isNotEmpty : Null 혹은 공백문자("") 이면 false 값 반환 StringUtils.isAnyEmpty : 문자들 중 Null 혹은 공백문자("") 있을 시 true 값 반환 StringUtils.isNoneEmpty : 문자들 중 Null 혹은 공백문자("") 있을 시 false 값 반환 StringUtils.isAllEmpty : 모든 문자열들이 Null 혹은.. JVM/Java 2022. 11. 18. [Lombok] 자주 사용되는 Lombok Annotation 기능정리 먼저 자바 라이브러리 Lombok 다운로드 및 적용방법은 다음 게시글을 참고하자. Java 필수 라이브러리 Lombok 사용, 적용방법 Java 필수 라이브러리 Lombok 사용, 적용방법 Lombok 라이브러리는 VO(Value Object) 나 DTO(Data Transfer Object) 생성 시 혁신적으로 코드를 줄여주는 라이브러리 입니다. 얼마나 혁신적으로 코드를 줄이는지.. aljjabaegi.tistory.com @Getter, @Setter 필드에 @Getter/@Setter 을 붙이면, 해당 필드에 대한 기본 getter/setter 메소드를 생성해준다. 접근 제한자 AccessLevel @Getter/@Setter 에서의 접근 제한자 설정을 할 수 있다. 만약 생성되는 getter/se.. JVM/Java 2022. 9. 4. [Java] 객체 매핑 라이브러리 ModelMapper 살펴보자 ModelMapper ? 서로 다른 클래스의 값을 한 번에 복사하게 도와주는 라이브러리로, 어떤 Object (Source Object) 에 있는 필드 값들을 자동으로 원하는 Object (Destination Object) 에 매핑 시켜주는 라이브러리다. ModelMapper 공식 문서 주로 DTO와 같은 클래스로 데이터를 받은 후 원하는 클래스(Entity)에 넣어줄 때, Getter/Setter를 이용해 필드를 복사/붙여넣기하는 작업을 거친다. 이 때, 매핑해야할 필드가 다른 경우도 빈번하다. 즉, 다른 모델의 Object를 매핑해줘야하는 작업이 발생할 수 있다. 이런 단점들을 해결하기 위한 라이브러리이다. 세팅 의존성 추가 build.gradle implementation 'org.modelmap.. JVM/Java 2022. 8. 17. [Java] Java Stream 활용하여 두 개의 List 객체 비교하기 Stream. -Match 메소드 예제 allMatch() : 모든 요소들이 매개 값(Predicate)로 주어진 조건을 만족하는지 조사 anyMatch() : 최소한 한 개의 요소가 주어진 조건에 만족하는 지 조사 noneMatch() : 모든 요소들이 주어진 조건을 만족하지 않는지 조사 class Test { public static void main(String[] args) { int[] intArray = {2, 4, 6}; boolean allResult = Arrays.stream(intArray).allMatch(a -> a % 2 == 0); boolean anyResult = Arrays.stream(intArray).anyMatch(a -> a % 2 == 0); boolean non.. JVM/Java 2022. 8. 16. [MyBatis] 중복 쿼리 줄여주는 sql, include, property 태그 문법 살펴보기 다른 구문에서 재사용하기 위한 SQL 조각 사용 조건 id 속성 값 필수 사용하려는 태그의 위치보다 먼저 선언되어야 함 문법 ${alias}.id, ${alias}.username, ${alias}.password SQL 조각인 문을 DML (Data Manipulation Language) 태그, 즉, 다른 구문에 포함(삽입) 시키는 기술 문법 예제 Where 문법 재사용 where board_id = #{boardId} select pageNum from m_board Table 문법 재사용 from ${tableproperty} select pageNum JOIN문 활용 ${alias}.id, ${alias}.username, ${alias}.password select , from some_tab.. Database/MyBatis 2022. 7. 12. [알고리즘] 다익스트라 알고리즘 (Dijkstra Algorithm) 동작 원리 및 구현하기 다익스트라 알고리즘 개요 다익스트라(dijkstra) 알고리즘은 그래프에서 한 정점(노드)에서 다른 정점까지의 최단 경로를 구하는 알고리즘 중 하나이다. 이 과정에서 도착 정점(노드) 뿐만 아닌, 다른 정점까지 최단 경로로 방문하여 각 정점까지의 최단 경로를 모두 찾게 된다. 매번 최단 경로의 정점을 선택해 탐색을 반복한다. 그래프 알고리즘 중 최단 거리, 최소 비용을 구하는 알고리즘은 다익스트라 외에 벨만-포드 알고리즘, 프로이드 워샬 알고리즘 등이 있다. 동작 단계 출발 노드와 도착 노드를 설정한다. '최단 거리 테이블' 을 초기화한다. 현재 위치한 노드의 인접 노드 중 방문하지 않은 노드를 구별하고, 방문하지 않은 노드 중 거리가 가장 짧은 노드를 선택한다. (선택한 노드는 방문 처리한다.) 해당 .. Algorithm/Tree & Graph 2022. 7. 7. [자료구조] 자바 우선순위 큐(Priority Queue)의 클래스 사용하기 Priority Queue 일반적인 큐의 구조 FIFO (First In First Out)을 가진다. 우선순위를 먼저 결정하고, 우선순위가 높은 데이터가 먼저 나가는 구조이다. 우선순위 큐를 사용하기 위해 우선순위 큐에 저장할 객체는 필수적으로 Comparable Interface를 구현해야한다. Comaprable Interface 구현 시 compareTo method 를 override 하여 처리할 우선순위 조건을 리턴하면, 우선순위 큐가 우선순위가 높은 객체를 추출해준다. (기본적으로 낮은 숫자부터 큰 숫자 오름차순이다) Heap을 이용하여 구현하는 것이 일반적이다. 데이터 삽입 시 우선순위 기준으로 최대 힙, 최소 힙을 구성한다. 데이터 추출 시, 루트 노드를 얻어 루트 노드를 삭제할 때는 빈.. Algorithm/Stack & Queue 2022. 7. 5. [Java] 중복 키 허용 MultiValueMap 와 HashMap 차이 MultiValueMap 살펴보기 전에 Map에 대해 간단히 살펴보자. Map 의 종류 HashMap TreeMap LinkedHashMap HashMap Map의 기본 형식으로, key : value 를 한 쌍으로 데이터를 저장하며 중복된 키가 존재하지 않는다. Map에 있는 데이터는 키 값을 기준으로 가져온다. TreeMap HashMap 기능 + 자동 정렬 TreeMap은 데이터가 들어올 때마다 key 값에 따라 자동 정렬된다. LinkedHashMap HashMap 기능 + 입력 순서 보장 HashMap에 데이터를 C - B - A 순서로 했다면, 나중에 맵에 있는 모든 값을 출력할 때 C - B - A 순으로 출력된다는 보장이 없다. 하지만, LinkedHashMap은 이 문제를 해결해준다. M.. JVM/Java 2022. 6. 24. 이전 1 2 3 4 다음 추천 글 728x90 반응형