소소한 일상과 잡다한 정보

IT/Dart

Dart를 공부하게 된 이유 + Dart 특징

pandada 2025. 2. 14. 16:42
반응형

0. 풀스택 도전

 현재 웹 개발자이며, 회사 내부에서 전산업을 담당하는 사람으로써.. 풀스택을 한번 도전해봤으면 좋겠다는 생각이 들었다. 

1. Dart 언어란?

 Dart Google 개발한 오픈소스 프로그래밍 언어로, 주로 Flutter 프레임워크에서 사용된다. , 모바일, 데스크톱 애플리케이션 개발이 가능하며, 빠른 실행 속도와 비동기 프로그래밍에 최적화되어 있다.

 

2. Dart 선택했는가?

 ✔️ 뛰어난 성능

 Dart AOT(미리 컴파일) 방식으로 동작하여 네이티브 코드로 변환된다. Flutter 자체 렌더링 엔진(Skia) 사용하여 플랫폼과 관계없이 일관된 UI 빠른 렌더링을 제공한다. React Native JavaScript 네이티브 브릿지를 사용하기 때문에 성능이 Flutter보다 떨어질 있다.

 ✔️ 일관된 UI 제공

Flutter 자체 렌더링 엔진을 사용하여 Android iOS에서 동일한 UI 제공한다. 반면, React Native 네이티브 UI 컴포넌트를 사용하기 때문에 플랫폼마다 디자인 차이가 발생할 있다.

 ✔️ 다양한 플랫폼 지원

 Dart 사용하는 Flutter iOS, Android뿐만 아니라 , 데스크톱(Windows, Mac, Linux)까지 지원한다. React Native 모바일과 (RN for Web)까지만 지원하며, 데스크톱 지원이 제한적이다.

 ✔️ 빠른 개발 속도

 Flutter Hot Reload 기능을 지원하여 코드 변경 사항을 즉시 반영할 있다. React Native Hot Reload 제공하지만, 상태 유지가 어려운 경우가 있다. Dart 타입 안정성을 제공하며, 오류 발생 가능성을 줄여 유지보수에 유리하다.

 ✔️ 적응 난이도

JavaScript(React) 사용한 React Native 개발자가 쉽게 접근할 있다. 반면, Dart 상대적으로 생소할 있지만, 객체지향 프로그래밍(OOP) 기반이라 익숙한 개념을 적용할 있다. Dart 비동기 처리(Future, async/await, Stream) 명확하고 이해하기 쉬운 구조를 제공한다.

 ✔️ Google 지원

 Flutter Google 직접 지원하는 기술로, 지속적인 업데이트와 안정적인 생태계를 갖추고 있다. 반면, React Native Meta(Facebook)에서 개발했으며, 커뮤니티는 크지만 네이티브 모듈 의존도가 높아 업데이트 불안정할 있다.

 ✔️ Help 성?

 이건 개인적인 주관성이지만..  Flutter에 대한 오류 내용 등, 모르는 부분이 있으면 검색하면 대부분 쉽게 나오는 부분에 반면, React Native 너무 내용이 나오지 않는다... 처음 풀스택이던, 프론트이던 도전을 웹이 아니라 Application 쪽으로 진행한다고 했을 때에 검색이 너무 나오않는다..

3. 결론

 Flutter React Native 비교해 결과, 나는 Flutter 강력한 성능과 무엇보다도 모바일, , 데스크톱까지 하나의 코드로 개발할 있어 확장성이 뛰어난 부분에 있어서 Flutter를 선택하게 되었고, 이를 토대로 Dart를 공부하게 되었다.

Dart 비동기 지원과 빠른 실행 속도는 효율적인 개발을 가능하게 한다.

선택 기준 Flutter 추천 React Native 추천
빠른 성능, 고품질 UI
게임, 애니메이션 많은
개발자가 쉽게 적응 가능해야
커뮤니티와 라이브러리 지원 중요
네이티브 기능이 중요한 경우 (카메라, GPS )
하나의 코드로 , 모바일, 데스크탑까지 개발
  • Flutter: 성능과 일관된 UI 중요하다면 선택 ( 퀄리티 중요할 )
  • React Native: 기존 개발자(React 경험자) 빠르게 크로스플랫폼 앱을 개발해야 한다면 선택

반응형

 

1. Dart의 특징

✔️ JIT & AOT 컴파일

  • 개발 중에는 JIT(Just-In-Time) 컴파일 빠른 Hot Reload 지원
  • 배포 시에는 AOT(Ahead-Of-Time) 컴파일 성능 최적화

✔️ 객체지향 프로그래밍(OOP) 지원

  • Java, C# 유사한 문법
  • 클래스 기반 구조 (클래스, 인터페이스, 상속 지원)

✔️  플랫폼 독립적

  • , 모바일(Android, iOS), 서버 다양한 환경에서 실행 가능

✔️  Garbage Collection 지원

  • 메모리 관리 자동화

✔️  비동기 프로그래밍 지원

  • async/await, Future, Stream 활용한 비동기 처리

✔️  풍부한 패키지 지원

  • pub.dev에서 다양한 패키지 사용 가능

2. Dart 기본 문법

  • 변수 및 데이터 타입
void main() {
  int a = 10;  // 정수형
  double b = 41.195;  // 실수형
  String name = "Dart";  // 문자열
  bool isDart = true;  // 불리언
  dynamic anything = 1111;  // 동적 타입 (어떤 값이든 가능)
}

 

  • 리스트 & 맵
void main() {
  List<int> nums = [1, 2, 3, 4, 5];
  print(nums[0]); // 1
  Map<String, int> weights = {"Kim": 90, "Park": 85};
  print(weights["Kim"]); // 90
}

 

  • 함수
int add(int a, int b) {
  return a + b;
}

void main() {
  print(add(3, 4)); // 7
}

 

  • 클래스와 객체
class Person {
  String name;
  int age;
  
  Person(this.name, this.age);

  void introduce() {
    print("Hi, I'm $name and I'm $age years old.");
  }
}

void main() {
  Person p = Person("Kim", 35);
  p.introduce();
}

 

  • 비동기 프로그래밍 (Future, async/await)
Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 2));
  return "Data Loaded";
}

void main() async {
  print("Start");
  String data = await fetchData();
  print(data); // 2초 후 "Data Loaded" 출력
}

 

  • Stream (데이터 스트림 처리)
Stream<int> countStream() async* { //비동기 스트림을 생성
  for (int i = 1; i <= 5; i++) {
    await Future.delayed(Duration(seconds: 1)); //1초씩 대기
    yield i; // yield i를 통해 값을 스트림에 전달
  }
}

void main() async {
  await for (var value in countStream()) {
    print(value); // 1 2 3 4 5
  }
}
  • 대략적인 Dart이 기본 문법이다. 처음 보는 사람들은 이해가 안될테고.. Java를 조금 했다 하면 대략적으로라도 이해가 될 언어니까 나같은 웹개발자 출신들도 쉽게 할 수 있을 것이라는 생각이 든다.

3. Dart 실행 방식 ( 3가지 방식으로 실행 )

  1. JIT 컴파일 (Just-In-Time)
  2. AOT 컴파일 (Ahead-Of-Time)
  3. Dart VM (인터프리터 방식)

4. Dart 활용 사례

  • Flutter 프레임워크 (모바일, , 데스크탑 UI 개발)
  • 개발 (Dart Web, AngularDart)
  • 서버 개발 (Dart 백엔드 API 개발 가능)
  • CLI(Command Line) 개발

결론

  • Dart는 빠른 실행 속도, 강력한 OOP 지원, 비동기 프로그래밍 최적화 등의 특징을 가진 언어.
  • Flutter 배우려면 반드시 Dart 익혀야 하고, 기본적인 객체지향 비동기 개념을 이해하면 쉽게 사용할 수다.

 

 

반응형