DEV ℧ Developer Diary

[Java] Comparable을 이용해 객체를 한글, 영어, 숫자 순 정렬하기

Comparable<T> interface는 구현한 객체에 정렬기준을 정해 Array.sort()나 Collections.sort()를 통해 정렬을 했을때, Comparable<T>를 구현한 compareTo를 기준으로 객체의 순서를 정렬해주는 interface이다.

아래의 Node 객체는 단순한 String type의 name을 필드로 가지고 있는 객체이다.

한번 Comparable<T>를 구현해 한글, 영어, 숫자 순으로...

[EffectiveJava] item31 - 한정적 와일드카드를 사용해 API 유연성을 높이라

해당 Item의 정리에 앞서 자주 등장하는 단어인 불공변(invariant)과 공변(covariant)을 정리하고 가보자.

공변(covariant)   : A가 B의 하위 타입 일때, T<A>가 T<B>의 하위 타입이다.
불공변(invariant) : A가 B의 하위 타입 일때, T<A>가 T<B>의 하위 타입이 아니다.

대표적인 예시로 배열은 공변이며, 제네릭은 불공변으로 볼...

[EffectiveJava] item30 - 이왕이면 제네릭 메소드로 만들라

클래스와 마찬가지로 메소드도 제네릭으로 만들 수 있다. 매개변수화 타입을 받는 정적 유틸리티 메서드는 보통 제네릭이다. 예를 들어 Collections의 ‘알고리즘’ 메서드(binarySearch, sort 등)는 모두 제네릭 메서드로 구현되어 있다.

아래는 Collections의 binarySearch메서드 이다. 해당 메서드는 제네릭 메서드로 구현된걸 볼 수 있다.

  • binarySearch
<div...

[Java] Spring boot에서 graceful shutdown을 적용하자

최근 서버에 배포시마다 연결이 끊김에 따라, 해당 해결방법을 찾던 도중 Spring boot에서 graceful shutdown 이란 기능을 지원하는 것을 알게 되었다.

graceful [우아한] 이란 뜻이며, 말그대로 서버를 종료할때 갑자기 종료 시켜버리는 것이 아닌, 마저 하던 일을 종료하고 우아하게 종료하는 것을 말한다.

반대는 hard shutdown으로, 현재 실행되는...

[EffectiveJava] item29 - 이왕이면 제네릭 타입으로 만들라

JDK가 제공하는 제네릭 타입과 메서드를 사용하는 일은 일반적으로 쉬운 편 이지만, 제네릭 타입을 새로 만드는 일은 조금 더 어렵다.

아래의 예시코드를 살펴보자. item7의 예제코드 이다.

제네릭 변환

public class StackArray { private Object<span...