[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..
[Java, Kotlin] equals, HashCode
·
JVM/Kotlin
What's equals()? In default code in Object.java, equals() is defined as follows: public boolean equals(Object obj) { return (this == obj); } What's hashcode()? In the same Object.java class, hashcode() is defined as a native function. public native int hashcode(); Returns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided by java.util..
[Java, Kotlin] equals, ==, === 비교
·
JVM/Kotlin
Java 든 Kotlin 이든 문자열(String)은 reference 타입이다. Summary 구분 Java Kotlin == (Structural Equality) primitive: 값 비교 reference: (주소) 값 비교 primitive: 값 비교 reference: 참조하여 값 비교 .equals() reference 를 참조하여 값 비교 == 과 동일 === (Referential Eqaulity) X primitive: 값 비교 reference: (주소) 값 비교 주의할 점 1. 코틀린은 사실 primitive type 이 없다. 간단한 정수값을 할당한 변수에도 .toInt, toBoolean() 등 메소드 사용할 수 있는 이유가 여기있다. In Kotlin, everything i..