728x90
반응형

전체 글 131

[Effective Java] private 생성자나 열거타입으로 싱글턴임을 보증하라

싱글턴(singleton) 이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말합니다. 싱글턴을 만드는 방식 1. public static 멤버가 final 필드인 방식 public class SingletonTest { public static final SingletonTest INSTANCE = new SingletonTest(); private SingletonTest(){}; // private 생성자 } 2. 정적 팩터리 방식 public class SingletonTest { private static final SingletonTest INSTANCE = new SingletonTest(); private SingletonTest(){}; // private 생성자 public stat..

[Effective Java] 생성자에 매개변수가 많다면 빌더를 고려하라

정적 팩터리 메서드와 생성자는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 단점이 존재합니다. 점층적 생성자 패턴 생성자의 매개변수의 개수를 조절하여 객체를 생성하는 방식입니다. 이 방식은 매개변수의 순서도 중요하고 매개변수가 무엇을 의미하는지 알기도 어렵기 때문에 작성하기 어렵습니다. public class TestClass { private int x; private int y; private int z; public TestClass(int x) { this.x = x; } public TestClass(int x, int y) { this.x = x; this.y = y; } public TestClass(int x, int y, int z) { this.x = x; this.y = y; ..

[Effective Java] 생성자 대신 정적 팩터리 메서드를 고려하라

클래스는 생성자와 별도로 클래스의 인스턴스를 반환하는 정적 팩터리 메서드를 제공할 수 있습니다. 팩터리 메서드 장점 1. 이름을 가질 수 있다 `String.java의 valueOf @Notnull @Contract(pure = true) public static String valueOf(@NotNull char data[]){ return new String(data); } `Main.java //생성자를 사용하지 않고, 정적 팩토리 메서드를 통해 인스턴스 반환 public static void main(String[] args) { String str = String.valueOf("value assign"); System.out.println(str); } 위와 같이 정적 팩터리 메서드를 사용하면..

[Clean Code] 13장 동시성(1)

깨끗한 코드를 작성하기 위한 열세번째 기록 동시성이 필요한 이유 동시성은 결합을 없애는 전략입니다. 즉, 무엇과 언제를 분리하는 전략입니다. 무엇과 언제를 분리하면 애플리케이션 구조와 효율이 극적으로 나아집니다. 예시1) 서블릿 모델을 살펴보면 웹 혹은 EJB 컨테이너라는 우산 아래서 돌아가는데 컨테이너 들은 동시성을 부분적으로 관리합니다. 웹 요청이 들어올 때 마다 웹 서버는 비동기식으로 서블릿을 실행합니다. 그래서 서블릿 프로그래머는 들어오는 모든 웹 요청을 관리하지 않습니다. 예시2) 매일 수많은 웹 사이트에서 정보를 가져와 요약하는 정보 수집기를 봤을 때 단일 스레드 프로그램이라면, 수집하는데 많은 시간이 소요될 것입니다. 단일 스레드 수집기는 웹 소켓에서 입출력을 기다리는 시간이 아주 많기 때문..

[Connect PLC to Server] Postman으로 MultipartFile, RequestBody 요청 테스트

모듈을 통해 이미지 파일과 API에 필요한 데이터를 받아서 로직 처리를 하는 API를 제작하고 있었습니다. 아직 이미지파일과 데이터를 받는 작업은 완료되지 않아서 포스트맨 프로그램을 통해 테스트 해보려고 했습니다. 그런데 MultipartFile과 RequestBody를 한번에 요청할 수 없었습니다. @RequestPart Cpmtemt-type이 'multipart/form-data'와 관련된 경우 사용합니다. 즉, @RequestBody가 필요하지만 Binary Stream이 포함되는 MultipartFile과 같은 경우에 사용할 수 있습니다. MultipartFile도 사용가능하고 RequestBody에 포함되는 부분도 content-type을 명시하고 사용할 수 있기 때문에 @RequestPart..

[Clean Code] 12장 창발성

깨끗한 코드를 작성하기 위한 열두번째 기록 창발적 하위계층(구성 요소)에는 없는 특성이나 행동이 상위계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상을 창발성 [동아사이언스 기사 참조] 창발적 설계로 깔끔한 코드를 구현하자 1) 우수한 설계, 2) 쉬운 코드 구조와 설계 파악, 3) 쉬운 SRP, DIP 적용, 4) 우수한 설계의 창발성 촉진을 위해 4가지 규칙만 따르면 된다고 말합니다. 아래에서 4가지 규칙을 중요도 순으로 소개해드리겠습니다. 모든 테스트를 실행합니다. 중복을 없앱니다. 프로그래머 의도를 표현합니다. 클래스와 메서드 수를 최소로 줄입니다. 모든 테스트를 실행합니다. 검증을 위해서는 모든 테스트를 통과해야 합니다. 그렇기 때문에 테스트가 가능한 시스템을 만드는 것은 중요합니다. 검증이..

[Spring] Netty Server & Client 구현

[Spring] Netty 개념 Netty 비동기 네트워크 프레임워크입니다. Channel에서 발생하는 이벤트들을 EventLoop가 처리하는 구조를 가집니다. Channel 기본 입출력 작업은 네트워크 전송에서 제공하는 기본형을 이용합니다. 자 lakelight.tistory.com Java Netty Server TCP 통신 non-blocking model (NIO) I/O 작업이 진행되는 동안 유저 프로세스의 작업을 중단시키기 않는 방식입니다. non-blocking model은 작업 완료를 기다릴 필요가 없기 때문에 작업을 실행 시키고 다른 일을 할 수 있습니다. 이벤트가 오면 그 이벤트를 받아서 처리하는 시스템입니다. 많은 이벤트를 빠르고 경제적으로 처리할 수 있습니다. (Netty의 핵심) ..

Spring 2022.11.23

[Java] Mutable & Immutable

Mutable과 Immutable mutable 변할 수 있는, 잘 변하는 / Java: 가변 객체 immutable 변할 수 없는, 불변의 / Java: 불변 객체 Java Object 자바 객체는 기본적으로 Heap 영역에 할당되고, Stack 영역에 참조값을 갖는 참조 타입 변수를 통해 데이터에 접근합니다. 이러한 객체는 Mutable Object, Immutable Object로 나눌 수 있습니다. [Java] 메모리 관리 - 스택, 힙, Garbage Collection Stack 영역 Heap 영역에 생성된 객체 타입의 데이터들에 대한 참조를 위한 값들이 할당됩니다. 원시타입(Primitive Types) - byte, short, int, long, double, float, boolean,..

JAVA 2022.11.23

[Clean Code] 11장 시스템

깨끗한 코드를 작성하기 위한 열한번째 기록 깨끗한 코드를 구현하면 낮은 추상화 수준에서 관심사를 분리하기 쉬워집니다. 이 장에서는 높은 추상화 수준, 즉 시스템 수준에서도 개끗함을 유지하는 방법을 살펴보겠습니다. 시스템 제작과 시스템 사용을 분리하라 소프트웨어 시스템은 애플리케이션 객체를 제작하고 의존성을 서로 '연결' 하는 준비과정, 준비 과정 이후에 이어지는 런타임 로직을 분리해야 합니다. 관심사 분리는 가장 중요한 설계 기법 중 하나로, 많은 사람들은 이 부분을 놓치고 있습니다. public Service getService(){ if(service == null) service = new MyServiceImpl(); return service; } 다음 코드는 초기화 지연, 또는 계산 지연이라는..

[Management] Spring Data JPA : nativeQuery의 결과를 DTO에 직접 매핑

Error No converter found capable of converting from type [org.springframework.data.jpa.repository.query 1. 문제 인식 원자재 아이템 항목의 전체 재고를 한번에 조회하기 위한 쿼리를 만들었습니다. Spring Data Jpa 를 사용하기 때문에 @Query를 이용해서 작성했습니다. @Query(value = "SELECT item.name AS itemName, SUM(material.count) AS sumCount, MAX(material.created_date) AS recentCreatedDate " + "FROM material JOIN item ON item.id = material.item WHERE mater..

Project/Management 2022.11.11
728x90
반응형