반응형

제네릭 정의

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

제네릭은 클래스, 인터페이스, 메소드를 정의할 때 타입(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

[참고 자료]

https://www.inflearn.com/course/%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%BD%94%EB%A6%AC%EC%95%84-1705-%EA%B8%B0%EC%B4%88-%EC%84%B8%EB%AF%B8%EB%82%98/dashboard

 

[무료] 타입스크립트 코리아 : 기초 세미나 - 인프런 | 강의

타입스크립트 관련 강좌입니다., - 강의 소개 | 인프런...

www.inflearn.com

 

 

반응형

+ Recent posts