본문 바로가기
카테고리 없음

[고급] Dart 제네릭 프로그래밍/ 제네릭(Generic)의 기본 개념과 활용

by Maccrey Coding 2024. 9. 8.
728x90
반응형

 

Dart는 Flutter와 함께 많이 사용되면서 큰 인기를 끌고 있는 언어입니다.

Dart의 기능 중 하나인 "제네릭(Generic)"은 특히 타입 안전성을 높이고, 코드 재사용성을 극대화하는 데 유용합니다.

이번 글에서는 제네릭의 기본 개념부터 실제 활용 방법까지 초보자도 쉽게 이해할 수 있도록 설명하겠습니다.


1. 제네릭(Generic)란 무엇인가?

제네릭(Generic)은 타입을 일반화하여 코드의 재사용성을 높이는 방법입니다.

예를 들어, 리스트나 맵(Map)과 같은 컬렉션을 사용할 때 특정 타입을 강제하지 않고 여러 타입에 대해 동작하도록 할 수 있습니다.

이를 통해 다양한 데이터 타입을 처리하면서도 타입 안전성을 유지할 수 있습니다.

 

예시: 정수형 리스트와 문자열 리스트를 사용하는 경우, 제네릭을 활용하면 두 리스트를 위한 별도의 클래스를 작성하지 않아도 됩니다.

List<int> intList = [1, 2, 3];
List<String> stringList = ["a", "b", "c"];

위 코드에서 List<int>는 정수형 데이터만 저장할 수 있는 리스트를, List<String>은 문자열만 저장할 수 있는 리스트를 의미합니다.

Dart에서 리스트는 제네릭 클래스이기 때문에 원하는 타입을 지정해 사용할 수 있습니다.

2. 제네릭의 장점

2.1. 타입 안전성

제네릭을 사용하면 코드에서 잘못된 타입을 사용하는 것을 방지할 수 있습니다.

예를 들어, List<int>에 문자열을 추가하려고 하면 컴파일 에러가 발생합니다.

List<int> numbers = [1, 2, 3];
// numbers.add("Hello"); // 오류 발생!

2.2. 코드 재사용성

제네릭을 사용하면 하나의 클래스나 함수가 여러 타입을 처리할 수 있습니다. 이로 인해 동일한 로직을 여러 타입에 대해 구현할 필요 없이, 한 번만 구현해 재사용할 수 있습니다.

class Box<T> {
  T value;
  Box(this.value);
}

Box<int> intBox = Box(123);
Box<String> stringBox = Box("Hello");

위 코드에서 Box 클래스는 제네릭 타입 T를 사용하여 다양한 타입의 데이터를 저장할 수 있습니다.

3. Dart에서 제네릭 사용 방법

3.1. 제네릭 클래스

제네릭 클래스는 클래스 선언 시 타입 파라미터를 정의하여 다양한 타입을 처리할 수 있도록 합니다. 다음은 제네릭 클래스를 사용하는 간단한 예제입니다.

class Pair<K, V> {
  K key;
  V value;

  Pair(this.key, this.value);
}

void main() {
  Pair<int, String> pair = Pair(1, "One");
  print('Key: ${pair.key}, Value: ${pair.value}');
}

위 예제에서는 Pair라는 제네릭 클래스를 정의하고, K와 V라는 타입 파라미터를 사용해 키와 값을 저장할 수 있도록 했습니다.

3.2. 제네릭 함수

제네릭은 클래스뿐만 아니라 함수에도 사용할 수 있습니다. 제네릭 함수는 입력받는 타입에 따라 다른 동작을 수행할 수 있도록 합니다.

T add<T extends num>(T a, T b) {
  return a + b;
}

void main() {
  print(add(2, 3)); // 5
  print(add(2.5, 3.5)); // 6.0
}

이 함수는 숫자 타입을 받아 더한 결과를 반환합니다. T extends num을 통해 T가 숫자 타입임을 보장합니다.

4. 제네릭 활용 팁

  • 필요한 경우에만 사용하기: 제네릭을 사용하면 코드가 복잡해질 수 있습니다. 필요하지 않은 경우에는 사용을 피하는 것이 좋습니다.

  • 타입 제약 사용하기: 제네릭 타입에 특정 타입을 제약하면 보다 안전하게 사용할 수 있습니다. 예를 들어, T extends num은 T가 반드시 숫자여야 함을 보장합니다.

  • 리스트나 맵과 같은 컬렉션과 함께 사용하기: Dart의 내장 컬렉션 클래스들은 모두 제네릭을 지원하므로 다양한 타입의 데이터를 처리할 때 유용합니다.

Dart의 제네릭은 코드의 재사용성과 타입 안전성을 높여주는 강력한 도구입니다.

제네릭의 개념과 활용 방법을 이해하면 더 효율적이고 안전한 코드를 작성할 수 있습니다.

이번 포스트를 통해 제네릭에 대한 이해가 깊어졌기를 바랍니다. 앞으로 다양한 프로젝트에서 제네릭을 적극 활용해 보세요!

 

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

728x90
반응형