<개인공부>/[Flutter, Dart]

[Dart] 다트 .. (캐스캐이드 연산자) 정리

BlockDMask 2025. 2. 5. 20:44
반응형

안녕하세요. BlockDMask입니다.

오늘은 Dart 문법 중에 신기하고 편리한 문법인 캐스캐이드 연산자(..)에 대해서 이야기해볼까 합니다.

잘 쓰면 코드를 간결하고 가독성 좋게만들어 줄 수 있습니다.

그럼, 오늘은 캐스캐이드 연산자가 무엇인지, 언제 사용하면 좋은지, 예제까지 함께 설명해보겠습니다.

 

1. 캐스캐이드 연산자(..)가 무엇인가?

우리가 보통 객체를 만들고 나면, 여러 개의 메서드를 호출하거나 프로퍼티를 설정해야 할 때가 많습니다.
하지만, 매번 객체 이름을 반복하는 것은 코드가 길어지고, 좀 귀찮습니다.

예를 들어서 아래 코드를 한번 보겠습니다.
아래 코드는 사람(Person) 객체의 이름과 나이를 설정한 후, 자기소개를 하는 코드입니다.

<코드> 일반적인 객체 함수 호출

 

class Person {
String name = '';
int age = 0;
void setName(String newName) {
name = newName;
}
void setAge(int newAge) {
age = newAge;
}
void introduce() {
print("안녕하세요, 저는 $name이고, 나이는 $age살 입니다.");
}
}
void main() {
Person person = Person();
person.setName("BlockDMask");
person.setAge(99);
person.introduce();
}

여기서 보면 "person."을 계속해서 반복하고 있는 것을 볼 수 있습니다.

이럴 때 캐스캐이드 연산자(..)를 사용하면 한 줄로 깔끔하게 정리할 수 있습니다.

 

 

<코드> .. (캐스캐이드 연산자) 사용

 

// Dart Cascade 연산자 사용 예제
void main() {
Person person = Person()
..setName("BlockDMask")
..setAge(99)
..introduce();
}

 

 

 

2. 다트 캐스캐이드 연산자 사용 방법

2-1) 객체를 만들고 여러 설정을 해야 할 때.

자동차(Car) 객체를 만들고 브랜드와 속도를 설정하는 예제를 만들어 보겠습니다.

class Car {
String brand = '';
int speed = 0;
void setBrand(String newBrand) {
brand = newBrand;
}
void accelerate(int increase) {
speed += increase;
}
void showStatus() {
print("자동차 브랜드: $brand, 현재 속도: $speed km/h");
}
}
void main() {
Car myCar = Car()
..setBrand("테슬라")
..accelerate(20)
..showStatus();
}

myCar 객체를 만들때 .. 캐스캐이드를 이용해서 한 줄에 세 개의 메서드를 호출하는 것을 볼 수 있습니다.

Car myCar = Car()..setBrand("aaa")..accelerate(20)..showStatus();  // 길게 늘리면 이렇게 볼 수 있습니다.

 

 

2-2) 프로퍼티에서도 사용이 가능합니다.

메서드뿐만 아니라, 변수(프로퍼티) 설정에도 ..을 사용할 수 있습니다.

class Person {
String name = '';
int age = 0;
void introduce() {
print("안녕하세요, 저는 $name이고, 나이는 $age살 입니다.");
}
}
void main() {
Person person = Person()
..name = "김블락"
..age = 88
..introduce();
}

 

2-3) 리스트에서도 활용이 가능합니다.

캐스캐이드 연산자를 통해서 list(리스트)에 여러 값을 추가할 수 있습니다.

void main() {
List<int> numbers = []
..add(1)
..add(2)
..add(3);
print(numbers); // 출력: [1, 2, 3]
}

 

 

 

3. 다트 .. 을 사용할 때 주의할 점.

3-1) 반환 값이 있는 메서드 에서는 .. 을 사용하면 안 됩니다. X

// 캐스캐이드 연산자 사용시 주의
class Counter {
int value = 0;
int increment() {
return ++value; // 값을 반환함
}
}
void main() {
Counter counter = Counter()
..increment() // ❌ 에러 가능성 있음!
..increment();
}

위 코드의 문제가 뭘까요?
- incrememt()는 int 값을 반환하지만, .. 은 객체를 접근하기 때문에 에러가 발생합니다.
- 그래서 ..increment()는 Count객체가 아니라 숫자(int)를 반환할 수 있기 때문에 아래와 같이 인식할 수 있습니다.

숫자.increment() // 숫자에서 increment 함수 불러줘! (에러)

 

 

3-2) 해결방법

메서드가 값을 반환하는 대신, this(자기 자신)을 반환하면 문제 해결!

class Counter {
int value = 0;
Counter increment() {
value++;
return this; // ✅ 이렇게 하면 연속 호출 가능!
}
}
void main() {
Counter counter = Counter()
..increment()
..increment();
print(counter.value); // 출력: 2
}

 

 

오늘은 플러터에서 사용하는 Dart 언어의 문법 중 cascade(..)에 대해서 알아보았습니다.
감사합니다

반응형