[JAVA] 제네릭(Generic) 문법 정리

Jakezo·2021년 8월 8일
0

Java

목록 보기
4/9

왜 제네릭을 사용해야 하는가?

제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다.

제네릭은 클래스와 인터페이스, 메소드를 정의할 때 타입(type)을 파라미터(parameter)로 사용할 수 있도록 한다.

장점1. 컴파일 시 강한 타입 체크를 할 수 있다.

  • 실행시 타입 에러가 나는 것보다 컴파일 시에 미리 타입을 강하게 체크해서 에러를 사전에 방지
    장점2. 타입 변환(castring)을 제거한다.

  • 비제네릭 코드는 불필요하게 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미친다.

List list = new ArrayList(); 
list.add("hello"); 
String str = (String) list.get(0); // 타입 변환이 필요 

List<String> list2 = new ArrayList<>(); 
list2.add("hello"); 
String str2 = list.get(0); // 불필요

제네릭 타입(class,interface)

제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다.

클래스 또는 인터페이스 이름 뒤에 "<>"부호가 붙고, 사이에 타입 파라미터가 위치한다.

public class 클래스<T> { ... } 
public interface 인터페이스<T> { ... }

타입파라미터는 일반적으로 대문자 알파벳 한 글자로 표현한다.

// 비제네릭 타입 이용시 
public class Corn{ 
	private Object obj; 
	public Object get();
	public void set(Object obj);
    } 
// 제네릭 타입 이용시 
public class Corn<T>{
	private T t; 
    public T get();
    public void set(T t);
    }

Object 타입을 사용하면 모든 객체를 저장할 수 있는 장점이 있지만, 저장할 때 타입 변환이 발생하고, 읽어 올때에도 타입 변환이 발생한다.

public class Example{ 
// 비제네릭 
Corn cron = new Corn(); 
corn.set("콘");  	// String -> Object (자동 타입 변환) 
String name = (String) corn.get(); 	// Object -> String (강제 타입 변환) 

// 제네릭 
Corn<String> corn = new Corn(); 
cron.set("콘"); 
String name = corn.get(); 
}
profile
탐험가

0개의 댓글