Home
Youngho's Devlog
Cancel

[이펙티브자바] 아이템43-람다보다는 메서드 참조를 사용하라

람다보다 메서드 참조를 사용해야 하는 이유 - 간결함 map.merge(key, 1, (count, incr) -> count + incr); 위 코드는 자바 8때 Map에 추가된 merge 메서드를 사용했다. merge 메서드는 키, 값, 함수를 인수로 받으며, 주어진 키가 맵 안에 아직 없다면 주어진 {키, 값} 쌍을 그대로 저장한다....

[Spring] Spring EventListener

출처 https://sunghs.tistory.com/139

[Java] 객체지향 생활체조 원칙

https://hudi.blog/thoughtworks-anthology-object-calisthenics/ 포스팅 본문에서도 설명하고 있지만 왜(Why?) 이러한 원칙이 나왔는지, 어떠한 문제점들을 해결하고자 하는지에 대해 초점을 맞춰서 읽으면 좋을 것 같다. Why? 에 대해 아주 적절하게 잘 설명되어 있어서 읽으면서 공감이 많이 갔는데, 이...

[이펙티브자바] 아이템41-정의하려는 것이 타입이라면 마커 인터페이스를 사용하라

마커 인터페이스와 관련하여 여기를 먼저 참고하면 좋다. 마커 인터페이스 아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스를 마커 인터페이스(marker interface)라 한다. Serializable 인터페이스는 자신을 구현한 클래스의 인스턴스는 ObjectOutputStream을 통...

[이펙티브자바] 아이템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-제네릭과 가변인수를 함께 쓸 때는 신중하라

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