제네릭스(Generics)는 자바 J2SE 5.0 이후에 도입된 개념이다. 사용법만 간단히 알아보자.
ArrayList<String> value = new ArrayList<String>();
ArrayList<String> value = new ArrayList<>(); //선호되는 방식
ArrayList value = new ArrayList(); // 제네릭스 도입 전까지 쓰던 방식
텍스트앞 뒤에 모두 자료형 타입을 적을 경우 인텔리제이와 같은 IDE에서는 경고메세지를 출력한다.
ArrayList< String > value = new ArrayList< String >()에서 < String >이라는 제네릭스 표현식은 ArrayList안에 담을 수 있는 자료형은 String 타입 뿐이라는 것을 의미한다.
즉, 제네릭스를 사용하면 타입체크가 명확해진다.
ArrayList value = new ArrayList();
value.add("138");
value.add("129");
String one = (String) value.get(0);
String two = (String) value.get(1);
위의 코드처럼 제네릭스를 사용하지 않을 경우에는 ArrayList안에 추가되는 객체는 Object 자료형으로 인식된다. 이는 모든 객체가 상속하고 있는 가장 기본적인 자료형이다. 따라서 ArrayList 객체인 value에 값을 넣을때는 자료형 상관없이 넣을 수 있지만 값을 가져올 경우에는 항상 Object 자료형에서 String 자료형으로 다음과 같이 형변환(casting)을 해주어야한다.
제네릭스를 쓰지 않을 경우 주의해야할 또 다른 점은 value안에 String 객체 이외의 객체도 넣을 수 있기 때문에 형변환 과정에서 잘못된 형변환으로 인한 오류가 발생할 가능성이 있다는 점을 주의해야 한다.
제네릭스로 자료형이 뭐엇인지 선언하기만 하면 이미 컴파일러가 해당 객체에 선언된 자료형만 추가 되어야하는 것을 알기 때문에 자료형에 대한 형변환 과정이 필요없다. 이렇게 제네릭스를 이용하면 형변환에 의한 불필요한 코딩과 잘못된 형변환에 의한 런타임 오류를 방지할 수 있다.
import java.util.ArrayList;
import java.util.Arrays;
public class Sample {
public static void main(String[] args) {
String[] data = {"7", "23", "11"};
ArrayList<String> value = new ArrayList<>(Arrays.asList(data));// String 배열로 ArrayList 생성
ArrayList<String> value = new ArrayList<>(Arrays.asList("7", "11", "23"));
// String 자료형을 여러개 전달하여 ArrayList 생성
System.out.println(value); // [7, 11, 23] 출력
}
}
java.util.Arrays클래스의 asList 메소드를 사용하면 이미 존재하는 문자열 배열으로 ArrayList를 생성할 수 있다.
import java.util.ArrayList;
import java.util.Arrays;
public class Sample {
public static void main(String[] args) {
ArrayList<String> value = new ArrayList<>(Arrays.asList("7", "11", "23"));
String result = String.join(",", value);
System.out.println(result); // 7,11,23 출력
}
}
String.join("구분자", 리스트객체)와 같이 사용하여 리스트의 각 요소에 "구분자(콤마)"를 삽입하여 하나의 문자열로 만들 수 있다. Sting.join은 문자열 배열에도 사용할 수 있다.
public class Sample {
public static void main(String[] args) {
String[] value = new String[]{"7", "11", "23"};
String result = String.join(",", value);
System.out.println(result); // 7,11,23 출력
}
}
"123", "22", "34"의 요소로 이루어진 ArrayList를 순서대로 정렬하기 위해서는 sort 메소드를 사용해야 한다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
public class Sample {
public static void main(String[] args) {
ArrayList<String> value = new ArrayList<>(Arrays.asList("123", "22", "34"));
pitches.sort(Comparator.naturalOrder()); // 오름차순 정렬
System.out.println(pitches); // [22, 34, 123] 출력
}
}
sort 메소드에는 정렬기준을 파라미터로 전달해야한다.
오름차순(순방향) 정렬 - Comparator.naturalOrder()
내림차순(역방향) 정렬 - Comparator.reverseOrder()