인스턴스화를 막으려거든 private 생성자를 사용하라 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 것이 아니다. 하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어 준다. 실제로 공개된 API들에서도 이처럼 의도치 않게 인스턴스화할 수 있게 된 클래스가 종종 있다. 인스턴스화를 막는 법 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. (컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성자가 없을 때 뿐이니..) 추상 클래스로 만들어서 인스턴스화를 막을 수 없다. 하위 클래스를 만들어 인스턴스화 하면 그만이다.. 또한, 이를 상속해서 쓰라는 뜻으로 오해할 수 있으니.. 그렇다면 더욱 큰일이다. public class UtilityCl..
private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴(singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴의 전형적인 예로는 함수와 같은 무상태(stateless) 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수 있다. 한번의 객체 생성으로 재사용할 수 있기 떄문에 메모리 낭비를 방지할 수 있다. 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. 또한 멀티 쓰레드 환경에서 동기화 문제가 발생할 수 도 있다. 싱글턴을 만드는 방식 필드 방식의 싱글턴 public class Elvis { public static final Elvis INSTANCE = ..
생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩터리와 생성자에는 똑같은 제약이 하나 있다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 식품 포장의 영양정보를 표현하는 클래스를 생각해보자. 필수 항목 몇개와 대부분 값이 그냥 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 객체 참조로 변환해준다. 정적 팩터리..
- Total
- Today
- Yesterday
- vue.js
- MSSQL
- update query multi row
- 싱글턴
- update set multi
- 슬랙봇
- 뱅셀 유전자
- 슬랙 /
- 뱅크샐러드 유전자
- spring-boot-starter-data-redis
- gradle
- multiple row update
- 뱅크샐러드
- Slack
- update query mutiple row
- springboot https
- 몽고DB 완벽가이드
- SpringBoot
- 슬랙
- 그레이들
- 이펙티브자바
- update query
- 업데이트 쿼리
- visual studio code
- 이것이 자바다
- effectivejava
- update set multiple
- 다중 업데이트
- update query set multiple
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |