... 으로 시작하는 연산자가 궁금하신가요? 스프레드 연산자(spread operator)라고 하는데요, 여러 항목을 컬렉션에 추가할 때에 사용할 수 있습니다. 살펴보시지요.
... operator (스프레드 연산자)
'다트'에서 스프레드 연산자('...')를 유용하게 사용할 수 있는 곳은 특히 리스트(List)입니다! 😊 리스트를 설정하거나, 추가, 수정 등 다양한 작업이 있는 경우가 있을 텐데요, 이때 스프레드 연산자를 활용하면 자칫 길어질 수도 있는 코드를 단번에 해결하는 경우도 있어요!
스프레드 연산자는 리스트의 값을 다른 리스트에 설정할 수 있게 해줍니다. 이는 여러 값을 한 번에 새로운 리스트에 추가하거나, 기존 리스트를 확장할 때 유용하게 사용할 수 있어요.
void main() {
var list1 = [1, 2, 3];
var list2 = [0, ...list1];
print(list1); //[1,2,3]
print(list2); //[0,1,2,3]
}
위의 코드에서 '...list1'은 '[1, 2, 3]' 리스트의 각 요소를 풀어서 'list2'에 추가합니다. 그 결과 'list2'는 '[0, 1, 2, 3]'이 됩니다.
널 허용 리스트에 대한 스프레드 연산자: '...?'
널(null) 허용 리스트에 대해 스프레드 연산자를 사용할 때 '...?'를 이용할 수 있습니다. 이를 통해 리스트가 null일 때도 처리할 수 있습니다.
void main() {
var list1;
var list2 = [0, ...?list1];
var list3 = [0, ...?list1, 1];
print(list1); //null
print(list2); //[0]
print(list3); //[0,1]
}
여기서 'list1'이 null일 경우에도 에러 없이 'list2'는 '[0]'으로 초기화됩니다. '...?' 연산자는 null 값을 무시하고 처리하도록 도와줍니다.
값 복사 및 비교에서의 활용
스프레드 연산자는 값 복사에 사용할 수 있습니다. 특히, 리스트를 복사할 때 단순히 참조를 복사하는 것과는 다르게, 새로운 리스트를 생성하여 값 자체를 복사할 수 있답니다.
void main() {
final list1 = [1, 2, 3];
final list2 = list1;
final list3 = [...list1];
print(list2); //[1, 2, 3]
print(list3); //[1, 2, 3]
list1[1] = 0;
print(list2); //[1, 0, 3]
print(list3); //[1, 2, 3]
}
위 코드에서 'list2'는 'list1'과 동일한 참조를 가지기 때문에 'list1'의 값이 변경되면 'list2'의 값도 함께 변경됩니다. 반면에, 'list3'은 스프레드 연산자를 사용해 'list1'의 값을 복사한 새로운 리스트이므로, 'list1'이 변경되더라도 'list3'은 영향을 받지 않습니다.
스프레드 연산자 정리
스프레드 연산자는 리스트와 관련한 작업에서 유용하게 사용할 수 있어요.
값을 풀어서 다른 리스트에 삽입하거나, null 안전성을 보장하고, 값을 복사할 때 유용하게 사용할 수 있습니다.
