제네릭 정의
제네릭을 사용해서 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다.
제네릭은 클래스, 인터페이스, 메소드를 정의할 때 타입(type)을 파라미터로 사용할 수 있도록 한다.
타입 파라미터는 코드 작성 시 구체적인 타입으로 대체되어서 다양한 코드를 생성하도록 해준다.
1. 제네릭 장점
컴파일러는 코드에서 잘못 사용된 타입 때문에 발생하는 문제점을 제거하기 위해 제네릭 코드에 대해 강한 타입 체크를 한다.
//제네릭 문구
function hello<T>(message: T): T{
return message;
}
hello('Mark');
//에러가 발생하지 않음
hello<String>(35);
//입력한 타입과 입력한 파라미터의 타입이 일치하지 않기 때문에 에러가 발생함
형변환을 제거한다.
※ 비 제네릭 코드는 불필요한 형 변환을 하기 때문에 성능 저하가 나타날 수 있다.
TypeScript의 경우 타입을 확정 지을 수 있기 때문에 입력한 파마리터의 내장 함수를 사용할 수 있다.
2. 제네릭 타입 Class<T>, interface<T>
타입을 파라미터로 가지는 클래스와 인터페이스를 말한다.
제네릭 타입은 클래스, 인터페이스 이름 뒤에 "<>"부호가 붙고, 사이에 타입 파라미터 T가 위치한다.
public class 클래스 명<T>{….}
public interface 클래스 명<T>{….}
타입 파라미터는 변수 명과 동일한 규칙에 따라 작성한다.
여러 타입을 파라미터로 사용하기 위해서 오브젝트 타입을 사용해서 클래스를 만드는 경우에는 모든 종류의 자바 객체를 저장할 수 있는 장점이 있지만 저장할 때 타입 변환이 발생, 읽어올 때도 타입 변환이 발생한다.
이러한 타입 변환이 빈번해지면 전체 프로그램 성능에 악영향을 미치게 된다.
public class Box{
private Object object;
public void set(Object object) { this.object = object; }
public Object get() { return object; }
}
public class Apple{}
public class BoxExample{
public static void main(String[] args) {
Box box = new Box();
box.set("홍길동");
String name = (String)box.get();
// Object → String으로 형변환
box.set(new Apple());
Apple apple = (Apple)box.get();
// Object → Apple으로 형변환
}
그렇기 때문에 제네릭을 사용해서 정의를 한 뒤 객체를 생성할 때 구체적인 타입을 입력을 해주면 입력한 타입으로 내부적으로 입력한 타입으로 변경된다.
3. 제네릭의 사용 방식
basic generic
정의된 제네릭을 사용할 때 타입을 명확하게 지정 하지 않은 경우 입력한 파라미터의 타입을 T 로 추론하여 사용 하는 형식
//제네릭 문구
function hello<T>(message: T): T{
return message;
}
hello('Mark');
//Generic 타입을 쓰지 않으면, T 로 추론
//'Mark'가 String 타입이기 때문에 제네릭안에서는 T를 String으로 인식함
hello<String>('Mark');
//Generic 타입을 쓰면, T 를 확인
//제네릭을 사용할때 <String>으로 타입설정을 했기 때문에 T를 String으로 인식함
Generic Array
제네릭을 이용해서 인자에 배열을 입력할 수 있다.
//제네릭 문구
function hello<T>(messages: T[]): T{
return messages[0];
//딱히 의미없음
}
console.log(hello<string>(['Hello', 'world']));
// 위에는 문자열을 2개 적었는데 문자열, 숫자가 가능할지 모르겟음
기본적으로 제네릭이라는 기술에 대해서 알아보기 위해 알아보았고 JAVA의 제네릭에 대해서는 아래의 자바의 정석을 참조하는것이 좋다
(1) [자바의 정석 - 기초편] ch12-1 지네릭스란? - YouTube
[참고 자료]
[무료] 타입스크립트 코리아 : 기초 세미나 - 인프런 | 강의
타입스크립트 관련 강좌입니다., - 강의 소개 | 인프런...
www.inflearn.com