[Java] Enum 에는 equals 대신 == 을 써라
·
JVM/Java
TL;DR; 무적권 .eqauls() 대신 ==을 써라. Pizza.java @Getter @NoArgsConstructor @AllArgsConstructor public class Pizza { // == 을 쓰면 좋은 이유 // getStatus() 랑 PizzaStatus 값(평가값)이 실제로 같다 하더라도 타입은 다르기 때문에 // compile error 가 발생해야한다. // 이를 피하기위해 .equals() 대신 == 을 쓴다. // Q. enum 에 string 값을 삽입할 수 있는가? private PizzaStatus status; private PizzaColor color; public enum PizzaColor { GREEN, RED, BLUE } public enum Pizz..
[Java & Kotlin] Stream
·
JVM/Java
Stream 은 왜 만들어졌나? Java , Kotlin 은 List, Set, Array 등 다양한 Collection 을 제공한다. Collection API 와 Iterate 방식은 표준화 되었지만 각 클래스는 같은 기능을 하는 메소드가 중복 정의되어 있다. List 를 정렬하는 방법만 해도 쉽게 2가지를 떠올릴 수 있다. List.sort Collection.sort 리스트 정렬 public class JavaStreamTest { @DisplayName("Sort list with two way ") @Test void forLoop() { List nums = Arrays.asList(5, 4, 3, 2, 1); nums.sort(new Comparator() { @Override public..
[Java] SpringBoot 없이 Yaml config 로드하기 (feat.SnakeYaml)
·
JVM/Java
개요 SpringBoot 를 사용하지 않는 프로젝트로 환경 설정 값을 yaml 에 지정하고 싶었다. 따라서 순수 Java code 로 `application.yaml` 을 로드할 필요가 있었다. 방법 SnakeYaml + Map 방식 간단한 yaml 은 주로 아래와 같은 코드 스니펫으로 Map을 사용해서 파싱할 수 있다. @Test public void whenLoadYAML_thenLoadCorrectImplicitTypes() { Yaml yaml = new Yaml(); Map document = yaml.load("3.0: 2018-07-22"); assertNotNull(document); assertEquals(1, document.size()); assertTrue(document.conta..
Presentation - Business DTO를 분리시켜라
·
JVM/Java
Layered Architecture 개발 중이라면 Presentation - Business Layer 의 Request DTO의 분리를 고려하라. 공통의 Request DTO 사용시 문제점 Controller, Service 모두 같은 RequestDTO 를 쓰면 다음과 같은 문제가 발생한다. 1. Controller 의 Validation annotation 을 Service 가 그대로 달고간다. 2. DTO에 의해 Controller Business Layer 간 의존성이 생긴다. => Controller 및 Request DTO 추가 또는 변경시 Service Layer 가 영향을 받는다. 다이어그램으로 도식화하여 표현해보겠다. 만약, API Spec 이 확장된다면 어떻게 될까? DTO 분리 예..
[JPA] API 생성시 Entity 를 반환하지 말자.
·
JVM/JPA
🎯 Goals Entity 는 사실상 Getter Setter 및 핵심 비즈니스 메소드만 있어야한다. 화면 디자인과 관련된 로직을 추가해선 안된다. API 설계시 entity 객체를 반환하지 않아야한다. 라는 위 두 명제를 이해한다. 잘못된 예제 Member.java @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String userName; @Embedded private Address address; // 연관 관계의 주인이 아닌 경우 읽기 전용이 됨. // `member` field in order 에 의해 매핑되었다는 것을 명시. @..
[Kotlin] Array vs ArrayList vs LinkedList vs Queue
·
JVM/Kotlin
Array Pros index access O(1) Stack 영역에 연속된 메모리 할당으로 인해 캐시 히트율이 높음 Cons 데이터 크기를 미리 예상할 수 있을 때만 적절히 사용가능 삽입/삭제시 index control 해줘야함. ArrayList Pros index 기반 접근시간 O(1) 차례대로 데이터를 추가하거나 마지막 (꼬리) 부터 데이터 삭제는 빠름. Cons 삽입, 삭제시 밀어내기, 당겨오기 때문에 비효율적 Capacity 를 넘어갈 경우 기존 ArrayList 를 새 공간에 할당하며 복사가 일어나 비효율적 LinkedList Java, Kotlin 의 LinkedList 는 내부적으로 DoublyLinkedList 로 구현되어있다. class DoubleLinkedListNode ( var..