TIL: Flutter | Dart (10) 제네릭 - 221212

Lumpen·2022년 12월 11일
0

Dart

목록 보기
10/20

제네릭

제네릭은 매개변수를 통해 다양한 타입에 대한 유연함을 갖게 한다

타입 매개변수는 <>로 감싸서 지정한다
타입 매개변수를 선언하는 것은 매개변수화 타입을 정의한다고 말한다

타입 매개변수

매개변수는 클래스 생성 시 생성자에서 사용하거나
함수 호출 시 인자를 받기 위해 사용한다

타입 매개변수는 말 그대로 타입을 전달하는 것이라고 생각하면 된다

List 의 선언을 보면 이해가 될거라고 한다

abstract class List<E> implements EfficientLengthIterable<E> {
	...
	void add(E value);
    ...
}

E라는 제네릭을 선언하였기 때문에 타입 매개변수를 통해 타입을 지정할 수 있다
자바에서는 E를 형식 타입 매개변수라고 한다

List<int> intList = List();

여기서 List의 형식 타입 매개변수인 E에 전달되는 값은 int
int를 실제 타입 매개변수라고 한다

제네릭의 장점은 코드의 중복을 막을 수 있다
타입만 변환하기 위해 오버로딩을 하여 새로 정의해줄 필요가 없는 것이다

매개변수화 타입 제한

제네릭을 사용할 때 매개변수화 타입을 제한할 수도 있다
타입 매개변수에 extends를 사용해서 특정 클래스를 상속받을 수 있다

그럼 지정된 부모 클래스와 자식 클래스가 실제 타입이 될 수 있다 (다형성)

class Developer<T extedns Person> {
	
}

이런 식으로 타입 제한을 하게되면 Developer 클래스를 통해 생성되는 객체는
Person 타입이나 Developer 타입만을 가질 수 있게 된다

제네릭 메소드

제네릭은 클래스 뿐만 아니라 메소드에서도 사용 가능하다
매개변수의 타입, 리턴 타입 등을 제네릭으로 지정할 수 있다

class Person {
	T returnParam<T>(T param) {
    	return param;
    }
}

위와 같이 작성된 메소드는 제네릭을 통해 매개변수의 타입을 지정하고, 리턴 타입 또한 동일하게 지정된다

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글