Dart 고급 문법 & 최적화 심화 학습과정입니다. Dart의 고급 문법 그리고 Dart 최적화 방법을 학습하고자 하는 사람들을 위해서 작성한 글입니다. 개념 설명 → 실습 예제 2개 → 해설 & 출력 예시 단계로 구성되어 있으니 스텝 바이 스텝으로 배우시기 바랍니다.
🚀 Dart 고급 문법 & 최적화 심화 학습
코드를 더 깔끔하게, 더 똑똑하게, 더 강력하게 만드는 기술!
✅ 1. 익명 함수 타입 정의 (typedef)
📘 개념 설명
-
typedef는 복잡한 함수 타입을 간단한 이름으로 정의하는 기능이에요.
-
주로 콜백 함수나 고차 함수를 쓸 때 가독성을 높여줍니다.
🏆 실습 예제 1: 함수 타입 정의하기
typedef MathOperation = int Function(int, int);
int calculate(int a, int b, MathOperation op) {
return op(a, b);
}
void main() {
print(calculate(3, 4, (x, y) => x + y));
}
✅ 출력:
7
🏆 실습 예제 2: 문자열 처리 콜백 함수 타입
typedef StringProcessor = String Function(String);
void printProcessed(String text, StringProcessor processor) {
print(processor(text));
}
void main() {
printProcessed('hello', (s) => s.toUpperCase());
}
✅ 출력:
HELLO
✅ 2. Enum (열거형) 활용
📘 개념 설명
-
Enum은 관련된 값들을 하나로 묶어서 선택지처럼 사용하는 타입이에요.
-
예: 요일, 상태값, 방향 등
🏆 실습 예제 1: 요일 enum 사용하기
enum Weekday { Monday, Tuesday, Wednesday }
void main() {
Weekday today = Weekday.Tuesday;
if (today == Weekday.Tuesday) {
print('오늘은 화요일!');
}
}
✅ 출력:
오늘은 화요일!
🏆 실습 예제 2: Switch문과 Enum
enum TrafficLight { red, yellow, green }
void main() {
TrafficLight signal = TrafficLight.red;
switch (signal) {
case TrafficLight.red:
print('멈추세요!');
break;
case TrafficLight.yellow:
print('준비하세요!');
break;
case TrafficLight.green:
print('출발!');
break;
}
}
✅ 3. Extension Methods (확장 메서드)
📘 개념 설명
-
기존 클래스에 새로운 기능을 추가할 수 있어요.
-
예: String 타입에 내가 만든 함수 붙이기
🏆 실습 예제 1: String에 확장 메서드 추가
extension StringExtension on String {
String greet() => '안녕, $this!';
}
void main() {
print('지훈'.greet());
}
✅ 출력:
안녕, 지훈!
🏆 실습 예제 2: int에 제곱 함수 추가
extension IntExtension on int {
int squared() => this * this;
}
void main() {
print(4.squared()); // 16
}
✅ 4. Cascade Notation ( .. 연산자)
📘 개념 설명
-
.. 연산자는 같은 객체에서 여러 작업을 연속적으로 호출할 때 사용해요.
-
객체를 매번 다시 적지 않아도 돼서 코드가 깔끔해집니다.
🏆 실습 예제 1: Cascade로 객체 설정하기
class Person {
String name = '';
int age = 0;
void introduce() => print('저는 $name, $age살이에요.');
}
void main() {
Person p = Person()
..name = '민지'
..age = 12
..introduce();
}
✅ 출력:
저는 민지, 12살이에요.
🏆 실습 예제 2: 리스트에 값 추가
void main() {
List<String> fruits = []
..add('사과')
..add('바나나')
..add('포도');
print(fruits);
}
✅ 5. Operator Overloading (연산자 오버로딩)
📘 개념 설명
-
직접 만든 클래스에 +, -, == 같은 연산자를 원하는 대로 정의할 수 있어요.
🏆 실습 예제 1: 좌표 더하기 연산자 정의
class Point {
int x, y;
Point(this.x, this.y);
Point operator +(Point other) => Point(x + other.x, y + other.y);
@override
String toString() => '($x, $y)';
}
void main() {
print(Point(2, 3) + Point(4, 5));
}
✅ 출력:
(6, 8)
🏆 실습 예제 2: == 연산자 오버라이드
class Student {
String name;
Student(this.name);
@override
bool operator ==(Object other) => other is Student && name == other.name;
}
void main() {
print(Student('지훈') == Student('지훈')); // true
}
✅ 6. Callable 클래스 ( call 메서드)
📘 개념 설명
-
클래스에 call() 메서드를 정의하면, 객체를 함수처럼 호출할 수 있어요.
🏆 실습 예제 1: 함수처럼 동작하는 클래스
class Greeter {
void call(String name) {
print('안녕하세요, $name님!');
}
}
void main() {
Greeter g = Greeter();
g('지훈');
}
✅ 출력:
안녕하세요, 지훈님!
🏆 실습 예제 2: 계산기 클래스
class Multiplier {
int call(int a, int b) => a * b;
}
void main() {
var m = Multiplier();
print(m(3, 4)); // 12
}
✅ 7. 메타 프로그래밍 (Reflective Programming) (심화)
📘 개념 설명
-
메타 프로그래밍은 코드가 자기 자신을 분석하거나 수정하는 기술이에요.
-
Dart에서는 dart:mirrors가 있지만, Flutter에서는 주로 코드 생성기로 대체 사용.
🏆 실습 예제 1: toString 오버라이드로 간단한 메타 정보 제공
class User {
String name;
int age;
User(this.name, this.age);
@override
String toString() => 'User(name: $name, age: $age)';
}
void main() {
print(User('민지', 12));
}
✅ 출력:
User(name: 민지, age: 12)
🏆 실습 예제 2: 코드 생성기 활용 (소개)
dev_dependencies:
build_runner: any
json_serializable: any
-
JSON 데이터를 클래스와 자동으로 연결해주는 방식!
-
실습은 Flutter 프로젝트에서 추천
🎓 마무리 요약
기능 |
설명 |
---|---|
typedef |
함수 타입 별칭 정의 |
enum |
고정된 선택지 목록 |
extension |
기존 클래스에 기능 추가 |
.. 연산자 |
같은 객체에서 연속 작업 |
연산자 오버로딩 |
직접 만든 클래스에 +, == 같은 연산자 정의 |
callable 클래스 |
객체를 함수처럼 호출 |
메타 프로그래밍 |
코드가 코드를 다루는 기술 |
💡 실전 활용 예시
-
Flutter UI 코드 최적화 (extension, cascade)
-
API 상태 관리용 enum
-
계산기, 벡터, 포인트 클래스에 연산자 오버로딩
-
콜백 함수 타입 통일 (typedef)
댓글 쓰기