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가지 방식으로 실행 )
- JIT 컴파일 (Just-In-Time)
- AOT 컴파일 (Ahead-Of-Time)
- Dart VM (인터프리터 방식)
4. Dart 활용 사례
- Flutter 프레임워크 (모바일, 웹, 데스크탑 UI 개발)
- 웹 개발 (Dart Web, AngularDart)
- 서버 개발 (Dart로 백엔드 API 개발 가능)
- CLI(Command Line) 앱 개발
결론
- Dart는 빠른 실행 속도, 강력한 OOP 지원, 비동기 프로그래밍 최적화 등의 특징을 가진 언어.
- Flutter를 배우려면 반드시 Dart를 익혀야 하고, 기본적인 객체지향 및 비동기 개념을 이해하면 더 쉽게 사용할 수다.
'IT > Dart' 카테고리의 다른 글
Dart_5일차 : 비동기 프로그래밍 (Future, async/await, Stream) (0) | 2025.02.21 |
---|---|
Dart_4일차 : 클래스(Class)와 객체(Object) 기초 (0) | 2025.02.20 |
Dart_3일차 : 컬렉션(List, Set, Map), 예외처리 (0) | 2025.02.19 |
Dart_2일차 : 제어문과 함수 심화 학습 (1) | 2025.02.17 |
Dart_1일차 : 기본 문법 (2) | 2025.02.16 |