Tuesday, July 11, 2023

Dart List .cast(), .castFrom(), .from() 차이점

Dart 언어의 List에 대한 이해와 변환 메소드 사용 가이드

이 글에서는 Dart 언어의 List에 대한 기본적인 이해와, 그 중에서도 데이터 유형을 변환하거나 새 List로 값을 복사하는데 사용되는 .cast(), .castFrom(), .from() 메소드에 대해 설명하겠습니다. 이들 메소드를 이해하고 제대로 활용하면, Dart 언어를 사용한 프로그래밍이 보다 효율적이고 편리해집니다.

.cast(), .castFrom(), .from() 메소드의 기능과 차이점

Dart 언어의 List에서 데이터 유형을 변환하거나 값을 복사하는 데는 .cast(), .castFrom(), .from() 메소드가 주로 사용됩니다. 이 세 가지 메서드의 주요 차이점은 다음과 같습니다:

  • .cast() - 원래 List의 요소 유형을 새 유형으로 캐스트합니다. 기존 List에 변경 사항이 유지되고, 새 캐스트된 List는 상태가 변경됩니다.
  • .castFrom() - 새로운 List를 생성하고, 원래 List에서 새 List로 요소를 복사하면서 요소 유형을 캐스트합니다. 기존 List에 영향을 주지 않습니다.
  • .from() - 원래 List의 값만 새 List에 복제합니다. 유형을 변경하지 않고도 두 개의 서로 다른 List를 생성할 수 있습니다.

다음 섹션에서는 각 메소드에 대한 자세한 설명과 사용 예를 제공하겠습니다.

.cast() 메소드의 작동 원리와 사용 예시

.cast() 메소드는 원본 List에서 내부 요소의 유형을 변경하는 데 사용됩니다. 새로운 유형으로 캐스트하기 위한 코드를 작성하면, .cast() 메소드가 실행되고 새 캐스트된 List가 반환됩니다. 원본 List에는 변경 사항이 적용되지 않습니다.

예를 들어, 특정 작업을 수행하기 위해 정수 리스트에서 double 리스트로 변환하는 작업을 수행하고자 할 때 사용할 수 있습니다.

void main(){
  List<int> intList = [1, 2, 3];
  List<double> doubleList = intList.cast<double>();
  
  print("intList: $intList"); // intList: [1, 2, 3]
  print("doubleList: $doubleList"); // doubleList: [1.0, 2.0, 3.0]
}

위의 코드 예제에서, 정수 리스트인 intList에서 .cast() 메소드를 호출하여 doubleList로 요소 유형을 변경했습니다. 이제 doubleList 변수에는 intList와 동일한 값이 double 유형인 새 List가 저장됩니다. 기존 intList에는 변경 사항이 적용되지 않습니다.

.castFrom() 메소드의 작동 원리와 사용 예시

.castFrom() 메소드는 원본 List의 요소 유형을 새로운 List에 복사하면서, 요소 유형을 지정된 새로운 유형으로 동시에 변경하려는 경우에 사용됩니다. 이 메소드를 사용하면 원래 리스트에 변경 사항 없이 새로 생성된 리스트에만 캐스팅이 적용됩니다.

예를 들어, 정수 list에서 double list로 변환하는 작업을 수행하고자 할 때 사용할 수 있습니다. 다음은 코드 예제입니다.

void main() {
  List<int> intList = [1, 2, 3];
  List<double> doubleList = List<double>.castFrom(intList);

  print("intList: $intList"); // intList: [1, 2, 3]
  print("doubleList: $doubleList"); // doubleList: [1.0, 2.0, 3.0]
}

위의 코드 예제에서, 정수 list인 intList를 List<double>로 변환하는 작업을 수행했습니다. .castFrom() 메소드를 통해 intList의 요소 유형이 doubleList로 변경되었습니다. 결과적으로 doubleList 변수에는 intList와 동일한 값이지만 double 유형인 새로운 리스트가 저장됩니다. 원본 intList에는 변경사항이 적용되지 않습니다.

.from() 메소드의 작동 원리와 사용 예시

.from() 메소드는 원본 List의 내용을 새 List에 복사하는 데 사용됩니다. 이 메소드로 복사된 새로운 List는 완전히 독립된 객체입니다. 원본 리스트의 변경이 복사본에 영향을 주지 않습니다. from() 메소드는 list의 데이터 유형이 동일한 경우에 사용하며, 유형을 변경하지 않습니다.

예를 들어, 정수 list에서 다른 정수 list로 복사하는 작업을 수행하고자 할 때 사용할 수 있습니다. 다음은 코드 예제입니다.

void main() {
  List<int> originalList = [1, 2, 3];
  List<int> copiedList = List<int>.from(originalList);

  print("originalList: $originalList"); // originalList: [1, 2, 3]
  print("copiedList: $copiedList"); // copiedList: [1, 2, 3]
}

위의 코드 예제에서, 정수 list인 originalList를 copiedList로 복사하는 작업을 수행했습니다. .from() 메소드를 통해 원본 리스트의 내용이 동일한 새로운 리스트에 복사되었습니다. originalList와 copiedList는 값은 같지만, 완전히 독립된 객체로서 각각의 변경이 상호 영향을 주지 않습니다.

각 메소드의 비교와 사용 상황에 따른 선택 가이드

.cast(), .castFrom(), .from() 메소드는 각기 다른 목적으로 사용됩니다. 이들 메서드의 주요 차이 및 사용 사례에 대해 간략히 정리하겠습니다.

  • .cast() 메소드: 원본 리스트의 요소 유형을 변경하려는 경우 사용합니다. 반환된 새로운 리스트에만 변경이 적용되며 원본 리스트는 영향을 받지 않습니다.
    • 예: 정수 list를 double list로 변환할 때
  • .castFrom() 메소드: 원본 리스트의 요소 유형을 변경한 상태로 새 리스트에 복사하려는 경우 사용합니다. 원본 리스트에 영향을 주지 않고 새로 생성된 리스트에만 변경사항이 적용됩니다.
    • 예: 정수 list를 캐스팅해서 double list로 만들고 동시에 원본 리스트를 유지해야 할 때
  • .from() 메소드: 원본 리스트와 동일한 요소 유형을 가진 새로운 리스트를 만드는데 사용합니다. 기존 리스트의 값만 새로 만든 리스트에 복제되며, 두 리스트는 서로 독립적입니다.
    • 예: 정수 리스트를 복제하여 독립적인 두 개의 리스트가 되도록 할 때

각 메서드의 사용 사례와 목적을 이해하면 적절한 상황에서 최선의 선택을 할 수 있습니다. 여러분의 프로젝트와 요구 사항에 맞게 적절한 메소드를 적용하세요. Dart 언어의 List와 관련된 더 많은 정보와 세부 사항은 Dart 공식 문서에서 확인하실 수 있습니다.


0 개의 댓글:

Post a Comment