- 시작하며 -
다트(Dart) 프로그래밍에서는 코드를 간결하고 효율적으로 작성하기 위해 다양한 기능과 문법을 활용할 수 있습니다. 이 중에서도 캐스케이드 연산자와 스프레드 연산자는 많은 개발자들에게 유용한 도구로 인정받고 있습니다. 이번 포스팅에서는 캐스케이드 연산자와 스프레드 연산자에 대해 자세히 알아보고, 실제 코드를 통해 그 활용 방법을 살펴보겠습니다.
- 본문 -
캐스케이드 연산자 (Cascade Operator)
캐스케이드( .., ?.. )를 사용하면 동일한 개체에 대해 일련의 작업을 수행할 수 있습니다. 인스턴스 멤버에 액세스 하는 것 외에도 동일한 개체에서 인스턴스 메서드를 호출할 수도 있습니다. 이렇게 하면 종종 임시 변수를 만드는 단계가 줄어들고 더 유동적인 코드를 작성할 수 있습니다.
다트 공식문서 중 ...
class Person {
String name;
int age;
void introduce() {
print("My name is $name, and I'm $age years old.");
}
}
void main() {
var person1 = Person();
person1.name = "Alice";
person1.age = 25;
person1.introduce(); // 출력: My name is Alice, and I'm 25 years old.
// Cascade Operator 적용
var person2 = Person()
..name = "Alice"
..age = 25
..introduce(); // 출력: My name is Alice, and I'm 25 years old.
}
위코드처럼 객체에 대한 연속적인 작업을 간단하게 수행할 수 있는 모습을 보면 알 수 있듯이 여러 코드들을 단축시켜 가독성을 높일 수 있을 것입니다.
스프레드 연산자
Dart는 목록, 맵 및 세트 리터럴에서 스프레드 연산자 ( ... ) 및 null 인식 스프레드 연산자 ( ...? )를 지원합니다....? 스프레드 연산자는 컬렉션에 여러 값을 삽입하는 간결한 방법을 제공합니다.
다트 공식문서 중...
void main() {
var list1 = [1, 2, 3];
var list2 = [4, 5, 6];
var combinedList = [...list1, ...list2];
print(combinedList); // 출력: [1, 2, 3, 4, 5, 6]
var set1 = {1, 2, 3};
var set2 = {3, 4, 5};
var combinedSet = {...set1, ...set2};
print(combinedSet); // 출력: {1, 2, 3, 4, 5}
var map1 = {"name": "Alice", "age": 25};
var map2 = {"city": "New York"};
var combinedMap = {...map1, ...map2};
print(combinedMap); // 출력: {name: Alice, age: 25, city: New York}
}
위코드처럼 List, Set, Map의 스프레드 연산자를 사용하여 컬렉션을 결합하고, 펼쳐진 결과를 새로운 변수에 할당하였습니다. 이를 통해 컬렉션을 확장하거나 결합하는 작업을 보다 간결하게 수행할 수 있습니다. 또한 더 나아간다면 저번에 배운 take나 where 같은 함수들을 사용한다면 더욱 유용하게 쓸 수 있을 것입니다.
- 마치며 -
이러한 함수들은 함수형 프로그래밍에서는 "chaining" 또는 "method chaining"이라고도 불립니다. 캐스케이드 연산자는 객체의 연속적인 작업을 처리할 때, 스프레드 연산자는 컬렉션을 결합하거나 확장할 때 자주 사용됩니다. 이러한 함수들은 코드의 가독성을 향상 시키고 작업을 간결하게 표현할 수 있어 유지보수성을 높여줄 아주 좋은 코드를 짤 수 있을 것으로 보입니다.
참고 :
https://dart.dev/language/operators#cascade-notation
https://dart.dev/language/collections#spread-operators
'Flutter > Dart' 카테고리의 다른 글
[Dart] 비동기 작업 클래스, Future (0) | 2023.06.12 |
---|---|
[Dart] Collection과 Iterable 데이터들을 다루기 (0) | 2023.06.09 |
[Dart] Dart를 알아봅시다 (0) | 2023.06.08 |