자바에서 제네릭(generic)이란 데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미합니다.
제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법입니다.
이렇게 컴파일 시에 미리 타입 검사(type check)를 수행하면 다음과 같은 장점을 가집니다.
클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있습니다
반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있습니다.
제네릭의 생성
ArrayList<E> list = new ArrayList<E>();
또한, Java SE 7부터 인스턴스 생성 시 타입을 추정할 수 있는 경우에는 타입을 생략할 수 있습니다.
ArrayList<Integer> list = new ArrayList<>();
ArrayList pitches =newArrayList();
aList.add("138");
aList.add("129");
String one = (String) pitches.get(0);
String two = (String) pitches.get(1);
위처럼 제네릭스를 사용하지 않을 경우에는 ArrayList 안에 추가되는 객체는 Object 자료형으로 인식된다. Object 자료형은 모든 객체가 상속하고 있는 가장 기본적인 자료형이다. 따라서 ArrayList 객체인 pitches에 값을 넣을 때는 문제가 안되지만 값을 가져올 경우에는 항상 Object 자료형에서 String 자료형으로 다음과 같이 형변환(casting)을 해 주어야만 한다.
import java.util.ArrayList;
import java.util.Arrays;publicclassSample {
publicstaticvoidmain(String[] args) {
String[] data = {"138", "129", "142"}; // 이미 투구수 데이터 배열이 있다.
ArrayList<String> pitches =newArrayList<>(Arrays.asList(data));
System.out.println(pitches); // [138, 129, 142] 출력
}
}
java.util.Arrays 클래스의 asList 메소드를 사용하면 이미 존재하는 문자열 배열로 ArrayList를 생성할 수 있다.
또는 다음과 같이 String 배열 대신 String 자료형을 여러개 전달하여 생성할 수도 있다.
import java.util.ArrayList;
import java.util.Arrays;
publicclassSample {
publicstaticvoidmain(String[] args) {
ArrayList<String> pitches =newArrayList<>(Arrays.asList("138", "129", "142"));
System.out.println(pitches);
}
}
앞에서 "138", "129", "142" 의 요소로 이루어진 ArrayList를 만들어 보았다. 그렇다면 이렇게 만들어진 ArrayList의 각 요소를 콤마(",")로 구분하여 다음과 같은 하나의 문자열로 만들 수 있는 방법이 있을까?
138,129,142
콤마를 각 요소 중간에 삽입하려면 다음과 같이 코드를 작성해야 한다.
import java.util.ArrayList;
import java.util.Arrays;
publicclassSample {
publicstaticvoidmain(String[] args) {
ArrayList<String> pitches =newArrayList<>(Arrays.asList("138", "129", "142"));
String result = "";
for (int i = 0; i < pitches.size(); i++) {
result += pitches.get(i);
result += ","; // 콤마를 추가한다.
}
result = result.substring(0, result.length() - 1); // 마지막 콤마는 제거한다.
System.out.println(result); // 138,129,142 출력
}
}
위 예는 pitches를 갯수만큼 루프를 돌면서 뒤에 콤마를 더하고 최종적으로 마지막 콤마를 제거하는 방법이다. 위 예에서도 볼 수 있듯이 리스트의 각각의 요소 사이에 구분자를 끼워넣어 하나의 문자열로 만드는 것은 꽤 까다로운 일이다.
하지만 String.join을 사용하면 다음처럼 매우 간단하게 처리할 수 있다.
import java.util.ArrayList;
import java.util.Arrays;
publicclassSample {
publicstaticvoidmain(String[] args) {
ArrayList<String> pitches =newArrayList<>(Arrays.asList("138", "129", "142"));
String result =String.join(",", pitches);
System.out.println(result); // 138,129,142 출력
}
}
String.join("구분자", 리스트객체)와 같이 사용하여 리스트의 각 요소에 "구분자"를 삽입하여 하나의 문자열로 만들 수 있다.
String.join은 다음처럼 문자열 배열에도 사용할 수 있다.