프로그래밍 언어/Dart

Dart 제네릭 사용법. 타입 안전성과 코드 재사용성을 높이는 방법 - Dart 기초 #16

eco7T 2024. 6. 20. 08:03
반응형

이번에는 Dart 제네릭(Generic)의 개념과 사용법을 설명하고, 이를 통해 프로그래밍에서의 코드 재사용성, 타입 안전성, 코드 간결성을 향상하는 방법에 대해 알아보겠습니다. 특히 Dart 언어에서의 제네릭 클래스와 함수 사용법을 구체적인 예시를 통해 쉽게 이해할 수 있도록 구성하였습니다.

Dart 제네릭 사용법
Dart 제네릭 사용법

 

Dart 제네릭 (Generic) 사용법

제네릭(Generic)은 "일반적인" 이라는 뜻을 가지고 있습니다. 프로그래밍에서 제네릭은 데이터 유형(Data Type)을 일반화하여 다양한 유형의 데이터를 처리할 수 있게 해주는 기능입니다. 제네릭을 사용하면 코드를 작성할 때 구체적인 데이터 유형을 지정하지 않고, 나중에 실행 시점에 데이터 유형을 결정할 수 있습니다.

    제네릭을 사용해야 할까?

제네릭을 사용하면 다음과 같은 장점이 있습니다.

  • 재사용성 증가: 동일한 코드를 다양한 데이터 유형에 적용할 수 있습니다.
  • 타입 안전성 보장: 컴파일 시점에 타입 검사를 수행하여 런타임 에러를 방지할 수 있습니다.
  • 코드 간결성 향상: 반복적인 코드를 줄일 수 있어 코드가 더 간결해집니다.

 

   제네릭 사용법

Dart에서 제네릭을 사용하려면 클래스나 함수 정의 시 `<>` 괄호 안에 타입 매개변수를 지정합니다. 타입 매개변수는 실제 데이터 유형을 나중에 결정할 수 있는 플레이스홀더 역할을 합니다.

제네릭 클래스 예시

class Box<T> { T data; Box(this.data); String toString() => 'Box: $data'; } void main() { Box<int> boxInt = Box(42); print(boxInt); // Box: 42 Box<String> boxString = Box('Hello, World!'); print(boxString); // Box: Hello, World! }

위 예시에서  Box  클래스는 제네릭 클래스입니다.  <T> 는 타입 매개변수로, 실제 데이터 유형을 나중에 결정할 수 있습니다.  Box  객체를 생성할 때 실제 데이터 유형을 지정하면( Box<int> Box<String> ) 해당 유형만 허용됩니다.

 

제네릭 함수 예시

T getFirst<T>(List<T> list) { return list.first; } void main() { print(getFirst<int>([1, 2, 3])); // 1 print(getFirst<String>(['Apple', 'Banana', 'Cherry'])); // Apple }

위 예시에서  getFirst  함수는 제네릭 함수입니다. 함수 호출 시  <T> 안에 실제 데이터 유형을 지정하면, 해당 유형만 허용됩니다.

반응형

제네릭 제약 조건 (Constraints)

때로는 제네릭 타입에 제약 조건을 걸어야 할 수도 있습니다. 예를 들어, 특정 클래스를 상속받거나 특정 인터페이스를 구현해야 하는 경우입니다. 이때  extends  키워드를 사용합니다.

class Animal {} class Dog extends Animal {} class Cat extends Animal {} class AnimalBox<T extends Animal> { T data; AnimalBox(this.data); String toString() => 'AnimalBox: $data'; } void main() { AnimalBox<Dog> dogBox = AnimalBox(Dog()); print(dogBox); // AnimalBox: Instance of 'Dog' // AnimalBox<String> stringBox = AnimalBox('Hello'); // 에러 발생 }

위 예시에서  AnimalBox  클래스의 제네릭 타입  T 는  Animal  클래스 또는 그 자식 클래스만 허용됩니다. 따라서  String  타입은 허용되지 않습니다.

 

다중 제네릭 타입 매개변수 사용하기

하나의 클래스나 함수에서 여러 개의 제네릭 타입 매개변수를 사용할 수 있습니다.

class Pair<T, U> { T first; U second; Pair(this.first, this.second); String toString() => 'Pair: $first, $second'; } void main() { Pair<int, String> pair = Pair(42, 'Hello'); print(pair); // Pair: 42, Hello }

위 예시에서  Pair  클래스는 두 개의 타입 매개변수  T 와  U 를 가지고 있습니다. 객체 생성 시 각각의 타입을 지정할 수 있습니다.

 

제네릭은 프로그래밍에서 매우 유용한 기능입니다. 타입 안전성을 보장하면서도 코드 재사용성을 높일 수 있습니다. 입문자 단계에서는 제네릭의 개념과 기본적인 사용법을 익히는 것이 중요합니다. 앞으로 더 복잡한 프로그램을 작성하면서 제네릭의 유용성을 깨달을 수 있을 것입니다.

반응형