[Java] 자바 record에 대해서
2023. 2. 25. 17:56
몰아 넣기
팀장님께서 자바16에 record가 정식 스펙이라고 말해 주었다. record가 무엇인가 봤더니 재미있는 것 같아 정리를 하고 싶어서 이렇게 글을 쓰게 되었다. record(레코드)란? 자바 14 이후부터 레코드가 preView로 추가되었고 자바 16부터는 공식 기능이 되었는데, 열거형과 마찬가지로 자바 클래스의 특별한 한 종류라고 바라볼 수 있다. 마치 클래스의 생성자와 같이 매개변수를 나열하면 되는데, 여기서는 이를 컴포넌트(component) 라고 한다. 사용법 자바를 사용하다 보면 반복적으로 비슷한 형태를 가지고 있는 코드 즉, 보일러 플레이트 코드가 많이 존재한다. DTO를 예로 들면 getter, setter, equals, hashCode, toString 같이 반복적으로 비슷한 형태를 가지..
[자료구조] 우선순위 큐(priorityQueue) 알아보기 (with 자바)
2023. 2. 11. 09:49
몰아 넣기
우선순위 큐(priorityQueue) 란? 우선순위 큐(Queue)란? 우선순위 큐는 평범한 큐(queue)나 스택(stack)과 비슷한 축약 자료형이다. 그러나 각 원소들은 우선순위를 갖고 있어 높은 우선순위를 가진 원소는 낮은 우선순위를 가진 원소보다 먼저 처리된다. 내부 요소는 힙으로 구성되어 있어 시간 복잡도는 O(NLogN)이며, 이진트리 구조로 이루어져 있다. 우선순위 큐에 들어가는 원소는 비교가 가능한 기준이 있어야한다. 즉, 우선순위 큐에 저장할 객체는 필수적으로 Comparable Interface를 구현해야한다. Comparable Interface를 구현하면 compareTo method를 override 하게 되고 해당 객체에서 처리할 우선순위 조건을 리턴해주면 PriorityQu..
[Spring] Swagger3 사용해보기
2023. 2. 5. 16:27
몰아 넣기
Swagger 란? 스웨거는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이다. - 위키 Swagger 2.x 버전을 적용할 수도 있고 3.x 버전을 적용할 수도 있습니다. 큰 차이는 없기 때문에 최신 버전인 Swagger 3.x 버전을 적용합니다. Swagger 적용 gradle 추가 implementation 'io.springfox:springfox-boot-starter:3.0.0' implementation 'io.springfox:springfox-swagger-ui:3.0.0' SwaggerConfig 생성 @Configuration @EnableSwagger2 public class Swagger..
[자바] 박싱과 언박싱에 대해서
2023. 2. 5. 16:14
몰아 넣기
박싱 과 언박싱이란? 자바에는 기본 타입과 Wrapper 클래스가 존재한다. /** 기본 타입 : int, long, float, double, boolean 등 Wrapper 클래스 : Integer, Long, Float, Double, Boolean 등 */ // 박싱 int i = 10; Integer num = new Integer(i); // 언박싱 Integer num = new Integer(10); int i = num.intValue(); 오토 박싱 & 오토 언박싱 JDK 1.5부터는 자바 컴파일러가 박싱과 언박싱이 필요한 상황에 자동으로 처리를 해준다. // 오토 박싱 int i = 10; Integer num = i; // 오토 언박싱 Integer num = new Integer(..
[Spring] @Async를 사용해 비동기 메소드 만들어보기
2023. 1. 8. 20:34
몰아 넣기
MTP 메일 전송중 N명에게 전송해야하는 로직이 있었다. 동기로 처리하기엔 100명에게 메일을 보낼 경우 한명 당 1초가 걸린다면 1분40초가 걸리는 것이다. 그래서 비동기처리를 하도록 하였다. Async 기능 켜기 자바 설정Java configuration으로 비동기 처리enabling asynchronous processing를 쓰려면 간단히 설정 클래스에 @EnableAsync를 추가해주기만 하면 된다 또는 SpringApplication에 추가해주어도 좋다. @Configuration @EnableAsync public class SpringAsyncConfig { ... } @EnableCaching @EnableAsync @EnableScheduling @SpringBootApplication..
[java/spring] Stream의 안좋은 예시 :1
2022. 12. 24. 21:10
몰아 넣기
회사에 들어가 개발자가 된지 3개월차가 되었다. 나는 Stream에 대해 관심이 많으며 그래도 Stream을 써야할 때는 못쓰더라도 쓰지 않아야할 곳에서는 안쓰고 있다고 자부하고 있었다. 하지만... 이번 기회에 그 자부심이 깨져버렸다. 여러 반복문 엑셀 다운로드기능을 구현중에 각 데이터를 Mapping 해야하는 상황이였습니다. 문제점 //헤더, 로우 정보 셋팅 LinkedHashMap dataMaps = new LinkedHashMap(); dataMaps.put("번호", numberList); dataMaps.put("회원그룹", responseList.stream().map(accountGiftCardDto -> (Object) accountGiftCardDto.getUserGroupName())..
[Spring]@Valid, @Validated 에 대해서 정리[3] - DTO구조를 이용한 @Valid
2022. 11. 27. 17:06
몰아 넣기
3부 groups을 하지 않고 Dto의 구조를 변경해 유효성검사를 하는 예제 입니다. 기존 구조 1부와 2부에서 소개된 구조는 groups에 클래스가 늘어나면 늘어날 수록, 유효성검사와 안하는 필드가 많을 수록 복잡하고 가독성이 떨어지는 단점이 있습니다. @PostMapping("/userUpdateTest") public void UserNameUpdate(@RequestBody @Validated(UserValidGroup.UserUpdate.class) UserRequestDto userRequestDto) { } @PostMapping("/userCreatTest") public void UserCreate( @RequestBody @Validated(UserValidGroup.UserCreate..
[자바/자료구조] Array(배열)과 LinkedList(연결 리스트) 그리고 ArrayList에 대한 정리[2] - ArrayList 사용법과 예제
2022. 9. 4. 22:11
몰아 넣기
지난 글 2022.09.03 - [JAVA/자료구조] - [자바/자료구조] Array(배열)과 LinkedList(연결 리스트) 그리고 ArrayList에 대한 정리[1] - 개념 및 배열 사용법 및 예제 들어가는 글 각 자료구조의 개념과 배열의 사용법 및 예제는 이전 글에 정리를 했습니다. ArrayList 사용법 Java언어의 경우 Collection framework라는 자체 라이브러리로 인해 ArrayList DataStructure를 기본적으로 내장하고 있기 때문에 우리가 직접 구현할 필요는 없습니다. 따라서 Java에서 제공하는 ArrayList API 기본적인 사용방법에 대해 알아보겠습니다. 기본적인 사용방법으로서 생성, 추가, 삭제, 가져오기, 크기, 반복을 실습을 통해서 공부해보겠습니다...