Home
Youngho's Devlog
Cancel

[이펙티브자바] 아이템52-다중정의는 신중히 사용하라

다중정의된 메서드는 컴파일 타임에 실행이 결정된다. 다음은 컬렉션을 집합, 리스트, 그 외로 구분하고자 만든 프로그램이다. “집합”, “리스트”, “그 외”를 차례로 출력할 것 같지만, 실제로 수행해보면 “그 외”만 세 번 연달아 출력한다. 이유가 뭘까? 다중정의(overloading. 오버로딩)된 세 classify 중 어느 메서드를 호출할지...

[이펙티브자바] 아이템53-가변인수는 신중히 사용하라

가변인수 가변인수는 명시한 타입의 인수를 0개 이상 받을 수 있다. 가변인수 메서드를 호출하면, 가장 먼저 인수의 개수와 길이가 같은 배열을 만들고 인수들을 이 배열에 저장하여 가변인수 메서드에 건네준다. // 코드 53-1 간단한 가변인수 활용 예 (320쪽) static int sum(int... args) { int sum = 0; ...

[이펙티브자바] 아이템45-스트림은 주의해서 사용하라

스트림 스트림 API는 다량의 데이터 처리 작업(순차적이든 병렬적이든)을 돕고자 자바8에 추가되었다. 이 API가 제공하는 추상 개념 중 핵심은 두 가지다. 1) 스트림(Stream)은 데이터 원소의 유한 혹은 무한 시퀀스(sequence)를 뜻한다. 2) 스트림 파이프라인(stream pipeline)은 이 원소들로 수행하는 연산 단계를 표현하...

[이펙티브자바] 아이템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...