[ Dart&Flutter ] Dart 고급 문법 & 최적화 심화 학습

Dart 고급 문법 & 최적화 심화 학습과정입니다. Dart의 고급 문법 그리고 Dart 최적화 방법을 학습하고자 하는 사람들을 위해서 작성한 글입니다.  개념 설명 → 실습 예제 2개 → 해설 & 출력 예시 단계로 구성되어 있으니 스텝 바이 스텝으로 배우시기 바랍니다. 



[ Dart&Flutter ] Dart 고급 문법 & 최적화 심화 학습
 [ Dart&Flutter ] Dart 고급 문법 & 최적화 심화 학습





🚀 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)


댓글 쓰기