| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 기업 교육 등에서 빠르게 전문 영상을 제작
- Overdub 음성 합성
- 교육용 e러닝
- 음성 변환(Text-to-Speech)
- 클라우드 기반 협업 기능
- AI 요약 및 자동 자막 생성 기능
- 긴 영상을 자동으로 쇼츠 형식으로 재구성.
- 고객지원 영상
- 마케팅 팀
- 영업 프레젠테이션
- 자연스러운 음성으로 변환
- 저화질 영상 개선 및 음성 잡음 제거.
- 사용자가 텍스트를 입력아바타 영상을 자동 영상상성
- 텍스트 기반 이미지 생성 및 영상 삽입 지원.
- 고객 안내 영상 제작 등에서 비용과 시간을 크게 절감시키는 도구
- CapCut은 자막 생성
- 촬영 없는 영상 시대
- 텍스트 기반으로 오디오나 영상 콘텐츠를 편집
- flutter 공부
- dart 레코드 사용법
- runway ml
- 속도 조절 등 기본 편집 기능 외에도 다양한 AI 기능을 제공
- 화면 녹화 및 자막 생성
- 인공지능 콘텐츠의 윤리적 사용을 위한 내부 정책과 인간+AI 복합 검수 체계를 운영
- pika labs
- 텍스트나 이미지 프롬프트로 완성형 영상을 자동 제작
- dart 공부
- 디오·비디오 편집 및 전사(트랜스크립션) 소프트웨어
- SaaS창업
- HeyGen은 인공지능 기반의 화상 아바타 생성 및 영상 제작 소프트웨어로
- Today
- Total
IT Story
Dart Cascade Operator 본문
Dart Cascade Operator (.., ?..) 완벽 가이드
Dart의 Cascade Operator (.., ?..)는 동일한 객체에 대한 여러 연산을 체이닝(Chaining) 방식으로 수행할 수 있도록 도와주는 강력한 기능입니다. 이를 활용하면 코드가 간결해지고 가독성이 향상됩니다.

1. Cascade Operator란?
Dart의 Cascade Operator는 객체를 여러 번 참조할 때 유용한 문법입니다. 이를 통해 중복된 코드 작성을 피할 수 있으며, 메서드 호출 및 필드 값을 설정하는 작업을 간결하게 표현할 수 있습니다.
Cascade Operator에는 두 가지 유형이 있습니다.
- .. (Double Dot): 널이 아닌 객체에 대해 연산을 수행
- ?.. (Null-aware Cascade): 널일 수 있는 객체에 대해 안전하게 연산 수행
2. Cascade Operator의 사용법
2.1 기본 예제
아래 예제에서 Cascade Operator를 사용하지 않는 경우와 사용하는 경우를 비교해 보겠습니다.
(1) Cascade Operator 없이 객체 설정
class Person {
String? name;
int? age;
void setName(String name) {
this.name = name;
}
void setAge(int age) {
this.age = age;
}
void introduce() {
print('My name is $name and I am $age years old.');
}
}
void main() {
var person = Person();
person.setName('Alice');
person.setAge(25);
person.introduce();
}
위 코드는 person 객체를 생성한 후, 각각의 메서드를 호출하여 name과 age 값을 설정합니다. 하지만 객체를 계속해서 반복 참조해야 하기 때문에 코드가 길어지고 가독성이 떨어집니다.
(2) Cascade Operator 사용
void main() {
var person = Person()
..setName('Alice')
..setAge(25)
..introduce();
}
🔹 차이점:
- .. 연산자를 사용하여 동일한 객체(person)에서 여러 메서드를 한 번에 호출
- 객체를 반복 참조하지 않아 코드가 짧고 직관적

3. Cascade Operator의 주요 활용법
3.1 객체 필드 초기화
객체를 생성할 때 여러 필드를 한 번에 설정할 수 있습니다.
class Car {
String? brand;
String? model;
int? year;
void showInfo() {
print('Car: $brand $model, Year: $year');
}
}
void main() {
var myCar = Car()
..brand = 'Tesla'
..model = 'Model 3'
..year = 2023
..showInfo();
}
3.2 메서드 체이닝
여러 메서드를 한 번에 호출할 때 유용합니다.
class Counter {
int value = 0;
void increment() => value++;
void decrement() => value--;
void printValue() => print('Counter: $value');
}
void main() {
var counter = Counter()
..increment()
..increment()
..decrement()
..printValue();
}

4. Null-aware Cascade (?..) 사용법
?.. 연산자는 객체가 null일 가능성이 있을 때 안전하게 메서드나 필드 접근을 수행할 수 있습니다.
4.1 Null-aware Cascade 예제
class User {
String? username;
void greet() => print('Hello, $username');
}
void main() {
User? user = null;
user
?..username = 'Charlie'
?..greet(); // 실행되지 않음 (user가 null이므로)
}
🔹 설명:
- user가 null이므로 ?.. 뒤의 코드가 실행되지 않음
- NullPointerException을 방지
5. Cascade Operator와 메서드 체이닝 차이점
메서드 체이닝과 Cascade Operator는 비슷해 보이지만 차이점이 있습니다.
5.1 메서드 체이닝과 비교
class Builder {
String message = '';
Builder append(String text) {
message += text;
return this;
}
void show() {
print(message);
}
}
void main() {
var builder = Builder()
.append('Hello ')
.append('World!')
..show(); // 메서드 체이닝 + Cascade Operator 혼합 사용 가능
}
📌 차이점:
- 메서드 체이닝: 각 메서드가 this를 반환해야 연속 호출 가능
- Cascade Operator: 반환 값이 없어도 객체 상태를 변경 가능

6. Cascade Operator의 장점과 단점
✅ 장점
- 코드 가독성 향상
- 객체를 여러 번 참조하지 않아 깔끔한 코드 작성 가능
- 중복 코드 감소
- object.property = value; 같은 반복적인 코드가 줄어듦
- 메서드 체이닝과 함께 사용 가능
- 더 직관적인 코드 스타일 가능
❌ 단점
- 메서드의 반환값을 사용할 수 없음
- ..은 객체를 반환하므로, 메서드가 return 값을 반환할 때는 사용할 수 없음
- 디버깅이 어려울 수 있음
- 연속적인 호출에서 어느 부분이 실패했는지 찾기 어려울 수 있음
7. 실전 예제: JSON 파싱과 Cascade Operator 활용
import 'dart:convert';
class Product {
String? name;
double? price;
Product({this.name, this.price});
void show() => print('Product: $name, Price: $price');
}
void main() {
String jsonString = '{"name": "Laptop", "price": 1299.99}';
Map<String, dynamic> jsonMap = jsonDecode(jsonString);
var product = Product()
..name = jsonMap['name']
..price = jsonMap['price']
..show();
}
📌 설명:
- JSON 데이터를 디코딩한 후, Cascade Operator를 활용해 Product 객체를 초기화
- 객체 설정과 메서드 호출을 간결하게 처리
8. 결론
Dart의 Cascade Operator (.., ?..) 는 객체의 필드 설정과 메서드 호출을 간결하게 만들어주는 강력한 기능입니다.
- .. 연산자는 객체가 null이 아닐 때 여러 연산을 연속적으로 실행
- ?.. 연산자는 객체가 null일 경우 안전하게 실행을 중단
이를 적절히 활용하면 가독성이 좋고 유지보수가 쉬운 코드를 작성할 수 있습니다.
특히, 객체 초기화, JSON 데이터 매핑, 빌더 패턴 등 다양한 상황에서 유용하게 활용할 수 있습니다. 🚀
'Programming > Dart' 카테고리의 다른 글
| Dart 비동기 프로그래밍 (0) | 2025.04.07 |
|---|---|
| Dart 컬렉션 (0) | 2025.04.04 |
| Dart Static (0) | 2025.04.03 |
| Dart Generic (0) | 2025.04.03 |
| Dart Abstract (0) | 2025.03.28 |