Home
Youngho's Devlog
Cancel

[이펙티브자바] 아이템39-명명 패턴보단 애너테이션을 사용하라

전통적으로 도구나 프레임워크나 특별히 다뤄야 할 프로그램 요소에는 딱 구분되는 명명 패턴을 적용해왔다. 예를 들어, 테스트 프레임워크인 JUnit은 버전3까진 테스트 메서드 이름을 test로 시작하게끔했다. 효과적이라고 보일 수 있겠지만 이는 많은 단점을 가지고 있다. 명명패턴의 단점 1)오타가 나면 안된다. tsetSaf...

[이펙티브자바] 아이템38-확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라

타입 안전 열거 패턴과 열거 타입 타입 안전 열거 패턴은 확장할 수 있으나 열거 타입은 확장할 수 없다. 즉, extends 하여 새로운 타입을 정의할 수 없다. 사실 대부분 상황에서 열거 타입을 확장하는건 좋지 않은 생각이다. 이와 관련해서는 여기에 자세히 설명되어 있다. 하지만 확장할 수 있는 열거 타입이 어울리는 경우가 있긴 하다. 앞전 아이템...

[이펙티브자바] 아이템36-비트 필드 대신 EnumSet을 사용하라

열거한 값들이 주로 집합으로 사용될 경우, 예전에는 아래와 같이 각 상수에서 서로 다른 2의 거듭제곱 값을 할당한 정수 열거 패턴(아이템36)을 사용했다. public class Text { public static final int STYLE_BOLD = 1 << 0; // 1 public static final int S...

[이펙티브자바] 아이템34-int 상수 대신 열거 타입을 사용하라

자바에서의 열거 타입이 없었다면? 아래처럼 정수 상수를 한 묶음으로 선언해서 사용하곤 했다. // 코드 34-1 정수 열거 패턴 - 상당히 취약하다! public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static f...

[이펙티브자바] 아이템33-타입 안전 이종 컨테이너를 고려하라

타입 안전 이종 컨테이너 패턴 컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매개변수화한 키를 함께 제공하여 제네릭 타입 시스템이 값의 타입이 키와 같음을 보장해주는 설계 패턴 방식이다. 책에는 위와 같은 설명을 하고 있지만 쉽게 이해되지 않는다. 아래 예제 코드를 통해 살펴보자. public class Favorite...

[이펙티브자바] 아이템32-제네릭과 가변인수를 함께 쓸 때는 신중하라

먼저 가변 인자에 대한 개념이 부족하다면 잘 정리된 여기를 참고하면 좋다. 가변 인수의 허점 가변 인수는 메드 넘기는 인수의 개수를 클라이언트가 조절할 수 있게 해는데, 구현 방식에 허점이 있다. 가변 인수를 호출하면 가변인수를 담기 위한 배열이 자동으로 하나 만들어진다. 그런데 내부로 감춰야 했을 이 배열을 그만 클라이언트에...

[JPA] HikariCP 설정

HikariCP는 고성능의 JDBC 커넥션 풀 라이브러리이다. SpringBoot는 커넥션 풀 관리를 위해 HikariCP를 사용한다. 이와 관련된 설정 옵션으로 아래 출처 링크를 참고하면 좋다. 참고 및 출처 https://effectivesquid.tistory.com/entry/HikariCP-%EC%84%B8%ED%8C%85%EC%8B%...

[JPA] Connection 누수

사용한 커넥션을 커넥션풀로 다시 반환하지 못하게 되는 현상을 커넥션 누수라 한다. 아래 출처를 통해 다양한 포스팅들을 참고하면 이를 이해하기 쉬울 것이다. 특히! Hibernate 멀티테넌시를 사용한다면 더욱 주의가 필요할 것이다 :) 참고 및 출처 https://velog.io/@rnjsrntkd95/Hikari-CP-%EC%BB%A4%EB%...

[이펙티브자바] 아이템31-한정적 와일드카드를 사용해 API 유연성을 높이라

이전 아이템28에서 이야기했듯 매개변수화 타입은 불공변(invariant)이다. 이를 꼭 기억하자. 즉 서로 다른 타입 Type1과 Type2가 있을 때 List<Type1>은 List<Type2>의 하위 타입도 상위 타입도 아니다. 예를 들어 List<Object>에는 어떤 객체든 ...

[이펙티브자바] 아이템30-이왕이면 제네릭 메서드로 만들자

로 타입으로 이루어진 메서드를 제네릭을 사용하여 변환 아래 예제 코드를 보자. // 코드 30-2 제네릭 메서드 (177쪽) public static Set union(Set s1, Set s2) { Set result = new HashSet<>(s1); result.addAll(s2); return result;...