자바 입문 기초 알고리즘 구조

자바 제네릭 2 (생활코딩)

ClapJeans 2021. 7. 22. 03:37

package org.opentutorials.javatutorials.generic;

class EmployeeInfo{

public int rank;

EmployeeInfo(int rank){ this.rank = rank; }

}

class Person<T, S>{

public T info;

public S id; //새로운 필드를 추가 이 필드역시도 어떠한 데이터 타입을 확정시키고 싶지않을때 쓰는 와일드 카드 

Person(T info, S id){

this.info = info;

this.id = id;

}

}

public class GenericDemo {

public static void main(String[] args) {

Person<EmployeeInfo, int> p1 = new Person<EmployeeInfo, int>(new EmployeeInfo(1), 1);

}

}

 

두개의 제너릭이 사용되는 사용 

매소드의 매개 변수처럼 T와 S처럼 다른 와일드 카드르 사용 

동일하게 쓰면 서로다른 데이터 타입을 사용을 못씀

 

T>>는  EmployeeInfo

S>> int가 와서 id 값은 int가됨 

person 이라는 생성자에 new EmployeeInfo(1)이 info로 전해지고 1이 id로 전해짐 

 

복수의 제너릭이 필요할때는 중간에 ,를 찍어주고 서로 이름이 달라야한다 

여기있는 T와S는 어떠한 기능은 없다. 보통 제너릭이라하면 T부터 시작해서 T뒤의 영어 대문자를 사용한다. 

 

제너릭에 대해서 알고있어야하는 특성

T에는 레퍼런스타입 참조형 기본 데이터 타입은 올수없다

int char double 기타등등의 것들 

 

그럼 사용을 못하나? 레퍼클래스를 사용하면된다 

기본 int 타입은 객체가아니다. 

자ㅂㅏ에서는 int를 객체인것처럼 만들수있는 객체들을 제공한다. 

그러한 객체들을 그러한클래스를 래퍼클래스라한다

 wrapper 라함 이것은 기본 타입을 객체로 포장하는 객체라 생각하면됨 

각각의 기본타입마다 래퍼클래스가 존재함 

 

Integer id = new Integer(1); //int 타입의 1을 랩퍼클래스 Integer 생성자로 들어가서 숫자 1을 의미하는 

하나의 객체의 인스턴스를 생성 

Person<EmployeeInfo, Integer> p1 = new Person<EmployeeInfo, Integer>(new EmployeeInfo(1), id);

 

이렇게 래핑을해줌 

여기서 제대로 들어갔는지 확인하기위함

p1.id.intvalue() 랩퍼 클래스에서 integer 에서 가지고있는 intvalue메소드를 사용하면 랩퍼클래스가 담고있는 원시데이터 타입, int 타입으로 돌려주는 메소드다