제네릭
제네릭
제네릭(generic)이란 클래스나 메소드에서 사용할 내부 데이터 타입을 외부에서 지정하는 방법이다 js와 타입스크립트 같은 느낌인듯
제네릭 사용 이유
1
2
3
4
5
6
7
public static void main(String[] args) {
List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
int sum = 0;
for (Object number : numbers) {
sum += (int) number; //int로 강제 형변환
}
}
제네릭 사용
1
2
3
4
5
6
7
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
int sum = 0;
for (Integer number : numbers) {
sum += number;
}
}
이미 integer형이기 때문에 형변환이 필요없다
또한 컴파일시 타입을 체크하기 때문에 의도치 않은 타입이 들어오는 것을 막을 수 있다
제네릭 선언
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class man <T> {
private T lastName;
private T firstName;
public T getFirstName() {
return firstName;
}
public void setFirstName(T firstName) {
this.firstName = firstName;
}
public T getLastName() {
return lastName;
}
public void setLastName(T lastName) {
this.lastName = lastName;
}
}
위 변수 타입을 모두 T로 선언 해주었다 T는 객체를 생성할 때 해당 타입으로 변경된다
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
man<String> man1 = new man<>();
//새로운 객체 생성시 원하는 타입을 부여하면 된다.
man1.setFirstName("minjeong");
man1.setLastname("kim");
//선언시 스트링 타입으로 선언하여 스트링 데이터를 입력하였다.
System.out.println(man1.getFirstName()); //minjeong
System.out.println(man1.getLastname()); //kim
}
멀티 제네릭
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class man <2,T2> {
private T lastName;
private T firstName;
private T2 age;
public T getFirstName() {
return firstName;
}
public void setFirstName(T firstName) {
this.firstName = firstName;
}
public T getLastName() {
return lastName;
}
public void setLastName(T lastName) {
this.lastName = lastName;
}
public T2 getAge() {
return age;
}
public void setAge(T2 age) {
this.age = age;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
man<String,Integer> man1 = new man<>();
man1.setFirstName("minjeong");
man1.setLastname("kim");
man1.setAge(26);
System.out.println(man1.getFirstName()); //minjeong
System.out.println(man1.getLastname()); //kim
System.out.println(man1.getAge()); //26
}
제네릭 메서드
메서드의 리턴타입이 앞에 선언한 제네릭 타입
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Car<T> {
private final T name;
private Car(T name) {
this.name = name;
}
public static <M> Car<M> from(M name) {
return new Car<>(name);
}
public <M> void printEqualsCar(Car<M> car) {
System.out.println(this.equals(car));
}
}
여기서는 printEqualsCar가 제네릭 메서드이다
This post is licensed under CC BY 4.0 by the author.