Generics

rlawlgus·2022년 10월 5일
0

Generics

제네릭스(generics)는 데이터의 형식의 안전성을 보장하는 데 사용한다.

ArrayList strList = new ArrayList();
strList.add("첫 번째");
strList.add("두 번째");
strList.add(3);

다음 코드는 배열 리스트(ArrayList) strList에 문자, 숫자 등 무엇이든 넣을 수 있다.
👉 컴파일 오류가 발생하지 않는다.

ArrayList<String> strList = new ArrayList<String>();
strList.add("첫 번째");
strList.add("두 번째");
strList.add(3);

다음 코드는 제네릭스를 사용하여 strList 배열 리스트에 문자열만 들어가도록 설정하였다.
👉 컴파일 오류가 발생한다.

<string>이외에도 <Integer>, <Double>등을 사용할 수 있고 사용자가 정의한 클래스형에도 사용할 수 있다.

import java.util.Arrays;
import java.util.List;
public class generic {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List numbers = Arrays.asList(1,2,3,4,5,6);
		int sum=0;
		for(Object number:numbers) {
			//직접 형변환이 필요하다.
			sum+=(int)number;
		}
		System.out.println(sum);
	}

제네릭스 사용하지 않은 경우
List numbers의 타입을 지정하지 않았기 때문에
Object로 타입이 지정되고
더하는 부분에서 형변환이 필요하다.

import java.util.Arrays;
import java.util.List;
public static void main(String[] args) {
	// TODO Auto-generated method stub
	List<Integer>numbers = Arrays.asList(1,2,3,4,5,6);
	int sum=0;
	for(Integer number:numbers){
		sum+=number;
	}
	System.out.println(sum);
	}
}

제네릭스 사용하는 경우
불필요한 형 변환을 하지 않아도 된다.

ArrayList에서의 제네릭스

ArrayList<String> arrList = new ArrayList<String>();

List에서의 제네릭스

List<Integer> list = new ArrayList<Integer>();

주의

import java.util.ArrayList;

public class generic_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList numList = new ArrayList();
		numList.add(1);
		numList.add(2);
		numList.add("3"); //integer값이 아니기 때문에 오류발생
		
		int hap=0;
		for(int i=0; i<numList.size(); i++) {
			hap += (int)numList.get(i);
		}
		System.out.print(hap);
	}
}

제네릭스를 사용하지 않음/ 실행 오류 발생
타입 미설정 Object로 선언된다.

ArrayList선언시 ArrayList list = new ArrayList()로 선언 후 내부에 임의의 값을 넣고 사용할수도 있지만 이렇게 사용할경우 값을 뽑아내기 위해서는 캐스팅(Casting) 연산이 필요하고 잘못된 타입으로 캐스팅을 한 경우에는 에러가 발생한다.

public static void main(String[] args) {
	// TODO Auto-generated method stub
	ArrayList<Integer> numList = new ArrayList<Integer>();
	numList.add(1);
	numList.add(2);
	numList.add("3");
    
	int hap=0;
	for(int i=0; i<numList.size(); i++) {
		hap+=numList.get(i);
	}
	System.out.println(hap);
}

제네릭스르 사용하여 <Integer>으로 타입 지정/ 컴파일 오류 발생
Integer형이 아닌 다른 값인 3을 문자형으로 받았기 때문에 컴파일 오류가 발생한다.

제네릭스<클래스> 사용

import java.util.ArrayList;

public class HW2_20211319 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		myClass c1 = new myClass(10);
		myClass c2 = new myClass(20);
		myClass c3 = new myClass(30);
		
		ArrayList<myClass> myList = new ArrayList<myClass>();
		myList.add(c1);
		myList.add(c2);
		myList.add(c3);
		
		int hap=0;
		for(int i=0; i<myList.size(); i++) {
			hap += myList.get(i).value;
		}
		System.out.print(hap);
	}
	
	static class myClass{
		int value;
		myClass (int value){
			this.value = value;
		}
	}
}
profile
Hello

0개의 댓글