인스턴스화를 막으려거든 private 생성자를 사용하라 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 것이 아니다. 하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어 준다. 실제로 공개된 API들에서도 이처럼 의도치 않게 인스턴스화할 수 있게 된 클래스가 종종 있다. 인스턴스화를 막는 법 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. (컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성자가 없을 때 뿐이니..) 추상 클래스로 만들어서 인스턴스화를 막을 수 없다. 하위 클래스를 만들어 인스턴스화 하면 그만이다.. 또한, 이를 상속해서 쓰라는 뜻으로 오해할 수 있으니.. 그렇다면 더욱 큰일이다. public class UtilityCl..
private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴(singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴의 전형적인 예로는 함수와 같은 무상태(stateless) 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수 있다. 한번의 객체 생성으로 재사용할 수 있기 떄문에 메모리 낭비를 방지할 수 있다. 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. 또한 멀티 쓰레드 환경에서 동기화 문제가 발생할 수 도 있다. 싱글턴을 만드는 방식 필드 방식의 싱글턴 public class Elvis { public static final Elvis INSTANCE = ..
외부 API를 테스트할 때 실제 API를 호출해서 테스트 코드를 작성할 수도 있겠지만 그렇게 되면 다양한 응답값에 대한 테스트의 어려움이 있을 수 있고 외부 API 상태에 따라 테스트 코드가 실패하는 경우가 발생할 수 있다. 그런 경우 MockWebServer를 이용하여 WebClient를 Mocking해서 다양한 테스트 케이스를 작성할 수 있다. MockWebServer A scriptable web server for testing HTTP clients Motivation This library makes it easy to test that your app Does The Right Thing when it makes HTTP and HTTPS calls. It lets you specify wh..
생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩터리와 생성자에는 똑같은 제약이 하나 있다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 식품 포장의 영양정보를 표현하는 클래스를 생각해보자. 필수 항목 몇개와 대부분 값이 그냥 0인 선택 항목으로 이루어 진다. 프로그래머들은 아래와 같은 방식들로 해결하고자 하였다. 점층적 생성자 패턴(telescoping constructor pattern) public class NutritionFacts { private final int servingSize; // (ml, 1회 제공량) 필수 private final int servings; // (회, 총 n회 제공량) 필수 private final int calories; // (1회 제공량당..
생성자 대신 정적 팩터리 메서드를 고려하라 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자다. 하지만 모든 프로그래머가 꼭 알아둬야 할 기법이 하나 더 있다. 클래스는 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드 말이다. public static Boolean valueOf (boolean b) { return b?Boolean.TRUE:Boolean.FALSE; } 위 코드는 boolean 기본 타입의 박싱 클래스(boxed class)인 Boolean에서 발췌한 간단한예다. 이 메서드는 기본 타입인 boolean 값을 받아 Boolean 객체 참조로 변환해준다. 정적 팩터리..
1. Coroutine 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 사용할 수 있는 동시 실행 설계 패턴이다. 코루틴을 사용하는 전문 개발자중 50% 이상이 생산성이 향상되었다고 보고했다. 코루틴(coroutine)은 루틴의 일종으로서, 협동 루틴이라 할 수 있다(코루틴의 "Co"는 with 또는 togather를 뜻한다). 상호 연계 프로그램을 일컫는다고도 표현가능하다. 루틴과 서브 루틴은 서로 비대칭적인 관계이지만, 코루틴들은 완전히 대칭적인, 즉 서로가 서로를 호출하는 관계이다. 코루틴들에서는 무엇이 무엇의 서브루틴인지를 구분하는 것이 불가능하다. 코루틴 A와 B가 있다고 할 때, A를 프로그래밍 할 때는 B를 A의 서브루틴으로 생각한다. 그러나 B를 프로그래밍할 때는 A가 B의 서브루틴이..
MDC(Mapped Diagnostic Context) 멀티 클라이언트 환경에서 다른 클라이언트와 값을 구별하여 로그를 추적할 수 있도록 제공되는 map이다. ThreadLocal에 구별할 수 있는 키 값을 저장하여 Thread가 존재하는 동안 계속해서 사용할 수 있도록 하는 방법으로 현재 log4j 및 logback만 MDC기능을 제공하고 있다. 애플리케이션에서 MDC 사용하기 springboot 2.1.1 , jdk 1.8 1. 의존성 주입 springboot 환경에서는 spring-boot-starter-web을 의존성으로 추가하면 logback이 기본으로 포함되어 있다. maven org.springframework.boot spring-boot-starter-web gradle dependenc..
Feign 페인은 넷플릭스에서 개발한 웹 서비스 클라이언트 도구로 애노테이션을 템플릿화된 요청으로 처리해 동작하는 HTTP 클라이언트 바인더다. 인터페이스를 만들고 애노테이션을 붙이는 방식이기 때문에 간단하게 사용할 수 있는 장점이 있다. 애플리케이션에서 페인 사용하기 springboot 2.1.1 , jdk 1.8 1. 의존성 주입 spring-cloud-starter-feign 아티팩트 또는 스프링 클라우드 넷플릭스를 위해 최소 1.4.0 버전의 spring-cloud-starter-openfeign 추가 maven org.springframework.cloud spring-cloud-starter-openfeign 2.1.3.RELEASE gradle ext{ springCloudVersion = ..
- Total
- Today
- Yesterday
- vue.js
- 뱅크샐러드
- 뱅크샐러드 유전자
- 몽고DB 완벽가이드
- update query multi row
- 슬랙
- update set multiple
- 싱글턴
- 다중 업데이트
- SpringBoot
- Slack
- update query mutiple row
- 이것이 자바다
- update query set multiple
- multiple row update
- 업데이트 쿼리
- 그레이들
- spring-boot-starter-data-redis
- 이펙티브자바
- 슬랙 /
- 뱅셀 유전자
- effectivejava
- springboot https
- update set multi
- visual studio code
- 슬랙봇
- MSSQL
- java
- update query
- gradle
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |