본문 바로가기

JAVA

자바_제네릭(Generic)

1. 제네릭(Generic)이란?

: 자바에서 제네릭(generic)이란 데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미한다.

제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다.

이렇게 컴파일 시에 미리 타입 검사(type check)를 수행하면 다음과 같은 장점을 가진다.

 

 

2. 선언 방법 및 실행

public class man <T> { 
	private T name; 
	//이름 필드 
    private T bloodtype; 
    	//혈액형 필드 

	public T getName() {
		return name; 
    } 
    public void setName(T name) { 
    	this.name = name; 
    } 
    public T getBloodtype() { 
    	return bloodtype; 
    } 
    public void setBloodtype(T bloodtype) { 
    	this.bloodtype = bloodtype; 
    } 
}

위의 코드를 보면 알 수 있듯이, 필드의 모든 변수 타입을 T로 지정하였다.

 

이후 이 타입 T는 객체를 생성할 때 해당 타입으로 변경된다. 

 

public class mainGe { 

	public static void main(String[] args) {
    
    	man<String> man1 = new man<>(); 
        //새로운 객체 생성시 원하는 타입을 부여하면 된다. 
        
        man1.setName("King"); 
        man1.setBloodtype("A"); 
        //선언시 스트링 타입으로 선언하여 스트링 데이터를 입력하였다. 
        
        System.out.println(man1.getName()); 
        System.out.println(man1.getBloodtype()); 
    } 
}

 

처음 new를 이용해 객체를 생성할 때 자신의 원하는 타입의 속성을 넣어주면 해당 속성으로 타입이 변환된다. 위의 코드에서는 man <String>으로 속성 값을 주어 set메서드를 이용해 String 데이터를 주고, 이후 get메서드를 이용해서 데이터를 출력해 보았다.

정상적으로 String 타입의 데이터를 받아 Console 창에 출력되는 것을 확인할 수 있다.



3. 제네릭 메소드(Generic Method)

: 바로 앞서 살펴본 제네릭의 특징 그대로 가져와서 메소드 형태에 대입한 것이다. 컴파일 타입에서 제네릭에 사용된 자료형에 맞는 함수들을 생성한다. 자료형을 너무 많이 만들면 그만큼 메모리가 차지하는 부분이 커지므로 적절히 사용해야 한다.

 

public class Info { 

	public static <T,T2> void info(T t, T2 t2){ 
    
    	 man<T, T2> man2 = new man<>(); 
         man2.setName(t); man2.setAge(t2); 
         
         System.out.println("나의 이름은 " + man2.getName() + " 입니다."); 
         System.out.println("나이는 " + man2.getAge() + " 입니다."); 
 	}        
}

public class mainGe { 

	public static void main(String[] args) { 
    
    	Info.info("King", 25); 
    } 
}

 

위의 코드를 출력해 보면 다음과 같은 결과가 나온다.

 

 

 

[출처] https://seeminglyjs.tistory.com/184

 

[Java] 자바 타입 제네릭(Generic) < T > 쉽게 알아보기

2020-12-03 제네릭(Generic) 은 클래스 / 인터페이스 / 메서드 등의 타입을 파라미터로 사용할 수 있게 해주는 역할을 한다. 또한 비제네릭 타입의 코드에서 발생하는 불필요한 타입

seeminglyjs.tistory.com

 

'JAVA' 카테고리의 다른 글

자바_Stack  (0) 2022.02.25
자바_Linked List  (0) 2022.02.24
자바 (Collection Framework)  (0) 2022.02.23
자바_커피 머신 구현  (0) 2022.02.22
자바 기초(상속_다형성)  (0) 2022.02.21