Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- C
- 안드로이드
- Flutter TextField
- Django REST framework
- RxJava
- UWP
- livedata
- NDK
- C++
- android architecture component
- Kotlin
- RxAndroid
- Rxjava2
- Android
- 안드로이드 구글맵
- Django REST
- FLUTTER
- 알고리즘
- C/C++
- kodility
- Java
- Django REST Android
- Android P
- dart
- mfc
- android push
- 프로그래머스
- flutter firestore
- 코틀린
- Python
Archives
- Today
- Total
개발하는 두더지
[Effective Java 규칙27] 가능하면 제네릭 메서드으로 만들 것 본문
[Effective Java 규칙27] 가능하면 제네릭 메서드으로 만들 것
Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다.
제네릭을 사용하면 클래스 뿐만 아니라 메서드도 효과를 본다. static 유틸 메서드는 특히 제네릭화하기 좋다. Collections에 구현된 모든 알고리즘 메서드는 제네릭으로 구현되어 있다.
두 집합의 합집합을 구하는 메서드를 제네릭을 이용하여 구현하면 아래와 같다.
public static <E> Set<E> union(Set<E> s1, Set<E> s2) {
Set<E> result = new HashSet<>(s1);
result.addAll(s2);
return result;
}
컴파일러는 메서드에 전달된 인자의 자료형을 보고 무슨 타입인지 알아 낸다. Set<String> 을 사용한다면 E가 String이라는 것을 알아낼 수 있는데 이 과정을 자료형 유추(type inference) 라고 한다.
다른 예로,
Comparable을 구현하는 자료형의 리스트를 인자로 받는 메서드을 많이 볼 수 있다. 이런 메서드는 리스트를 정렬, 탐색, 최댓값, 최소값을 계산할 수 있는데, 이런 작업이 가능하려면 리스트 내의 원소들이 서로 비교 가능해야 한다.
public static <T extends Comparable<T>> T max(List<T> list) {
Iterator<T> i = list.iterator();
T result = i.next();
while(i.hasNext()) {
T t = i.next();
if(t.compareTo(result) > 0)
result = t;
}
return result;
}
<T extends Comparable<T>>
자기 자신과 비교 가능한 모든 자료형 T 라고 생각하면 된다.
'Java,Android' 카테고리의 다른 글
[Effective Java 규칙29] 형 안전 다형성 컨테이너를 쓰면 어떨지 따져보라 (0) | 2018.10.08 |
---|---|
[Effective Java 규칙28] 한정적 와일드카드를 써서 API 유연성을 높여라 (0) | 2018.10.05 |
[Effective Java 규칙26] 가능하면 제네릭 자료형으로 만들 것 (0) | 2018.10.04 |
[Effective Java 규칙25] 배열대신 리스트를 써라 (0) | 2018.10.04 |
[Effective Java 규칙23] 새 코드에는 무인자 제네릭 자료형을 사용하지 마라 (0) | 2018.09.28 |
Comments