Back-end/Java
-
Legacy code에 Lombok 적용은 지양하자Back-end/Java 2024. 2. 7. 14:50
소개 오래 전부터 워낙 유명해서 Lombok을 사용하지 않는 곳이 없을 정도이다. 그러나 이번에 오랜 코드의 보일러 플레이트 코드들을 제거하기 위해서 Lombok을 도입했다. 하는 김에 Setter 구문을 제거하는 작업도 진행하였다. 코드만 보기에는 너무 깔끔하고 유지/보수가 편하다고 생각했었다. 그러나 QA 기간이 들어가면서 생각지도 못한 부분에서 에러들이 계속 발생하고 나를 괴롭혔다.. 만약 Legacy Code에 Lombok을 도입하고 싶은 분들이라면 아래 내용을 참고해서 고민해봤으면 한다.. 문제상황 1: Boolean 형식의 DTO 아래의 예시를 보면 boolean 형식의 get 메서드는 어떤 형태로 생성될까? @NoArgsConstructor @AllArgsConstructor @Getter ..
-
Enum 사용 중 Attribute value must be constant 발생Back-end/Java 2024. 2. 5. 20:25
개요 업무 중 Worker 구조를 Annotation 기반으로 변경하는 부분에서 아래와 같은 부분이 있었다. @WorkerTask(value = "externaldb-task", threadCount = 10) value의 String을 Enum의 속성으로 대체하려했다. 그러나 컴파일 에러가 발생했다. public enum TaskDefinitionNames { EXTERNAL_DB_TASK("externaldb-task"), ... public String getNameValue() { return nameValue; } } 메세지는 "Attribute value must be constant" 였다. 이유가 뭘까? 이유 TaskDefinitionNames.EXTERNAL_DB_TASK.getNameV..
-
Java Stream Custom Collection 구현하기Back-end/Java 2024. 1. 29. 14:18
이번 주제는 자바 8부터 지원하는 Custom Stream 구현하기 관한 주제입니다. 소개 자바 8이 등장하며 많은 자바 개발자들이 Stream을 사용한다. Stream의 강점은 간결하고 가독성이 좋은 코드를 만들 수 있고 Immutable한 동작을 보장한다. 복잡한 코드 파이프라인을 구성하는 경우 어렵게 코드를 구성해야한다. 이러한 문제를 해결할 수 있는 방법이 Custom stream이다. Collector Interface Interface Collector - T: 변환 및 집계가 필요한 입력 타입 - A: 중간 결과(변형이 가능한) 타입 - R: 결과에 대한 리턴 타입 인터페이스 제공 메서드 - supplier(): 새로운 결과를 생성함. - accumulator(): 변형된 데이터를 모으는 ..
-
Java - Serialize(직렬화)Back-end/Java 2021. 8. 24. 09:22
이번 포스팅은 직렬화에 대한 이야기를 해보려고 합니다. 일단 이 부분이 왜 필요하다고 느꼈냐면 Java는 JVM위에서 작동합니다. 그러나 JVM에서 작동하던 객체를 다른 환경으로 옮길려면 어떻게 옮길까요? 컴퓨터는 저희가 코드를 짜듯이 보내면 알 수 없을 것입니다. 그래서 직렬화라는 기법을 이용하여 데이터를 주고 받을 수 있습니다. ❓ 왜 직렬화를 할까? 직렬화는 우리가 휴대전화로 통화를 한다고 생각하면 됩니다. 그때 목소리를 전기적인 신호로 바꿔 상대방에게 전달하고 그것을 받은 상대방은 그것을 해석해 주인에게 전달합니다. 직렬화는 정보를 자유롭게 옮길 수 있다는 큰 장점이 있습니다. 그리고 우리는 데이터를 값 형식 데이터와 참조 형식 데이터로 나눕니다. 참조 형식은 주소값(0x...)을 참조하는데 이러..