[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 분리 예..
[Java] Data Transfer Object (DTO)
·
JVM/Java
개요 데이터를 전달용 오브젝트 Why to use 서버 - 클라이언트간 객체를 전달할 때 메소드 콜(주로 데이터 가공)을 줄이기 위해 View 는 보통 변경이 잦은데, 이때 Entity 를 받아선 DB Schema 영향에 직격타다. 따라서 DTO를 별도로 정의해서 전달하는게 국룰이다. When to use 서로 다른 많은 오브젝트가 존재하고, 프레젠테이션 모델이 한번에 그 데이터를 전달하려 할 때 DTO를 통해 도메인으로부터 클라이언트가 필요한 데이터만 전달할 수 있게함. Where to place? 주로 서비스 레이어 -> 컨트롤러 객체로 DTO를 전달한다. 역방향(컨트롤러 -> 서비스)의 경우에는 VO (불변객체) 를 사용한다. 개발자마다 다르지만DTO는 서비스 패키지, VO는 컨트롤러 패키지에 담는..
[JAVA] JDK 11 'var' Type Inference
·
JVM/Java
Compile 언어의 변수 선언 방식은 보통 Explicit Declaration이다. Java SE 10 이전 버전까지는 모두 Explicit Declaration을 따랐다. Explicit Declaration Type Example import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) throws IOException { // Type variable_name = ~~~ String blogName = "Falcon"; int numberOfRegister = 50; Buffered..
[Java] 입출력 스트림
·
JVM/Java
Java Stream 이란 입/출력 데이터 흐름의 통로 입력 스트림은 소스 데이터로부터 데이터를 읽어들이고 출력 스트림은 목적 대상까지 데이터를 흘려보내 쓴다. Java Stream 특징 Queue , FIFO(First In First Out) 방식 Byte 단위로 흐른다. 입출력 대상에 따라 나뉜다. FileStream -> 파일 ByteArrayStream -> 메모리 (byte 배열) PipeStream -> 프로세스 Input/OutputStream InputStream 은 read() , OutputStream 은 write() 추상 메소드를 기본적으로 구현하게 되어있다. FileInput/Ouput Stream은 모두 In/Output Stream의 자식 abstract method read..