Flutter 튜토리얼 1편: Flutter 소개와 첫 앱 만들기

요약#

핵심 요지#

  • 문제 정의: 플랫폼별로 앱을 따로 만들면 개발 비용과 유지보수 부담이 배로 늘어난다.
  • 핵심 주장: Flutter는 단일 코드베이스로 모바일, 웹, 데스크톱 앱을 동시에 만들 수 있다.
  • 주요 근거: Widget1 기반 선언적 UI, hot reload2로 빠른 개발 사이클, Dart 언어의 생산성이 핵심이다.
  • 실무 기준: VS Code + Flutter 확장을 사용하면 가장 빠르게 시작할 수 있다.
  • 한계: 플랫폼 네이티브 기능이 필요한 경우 별도 플러그인이나 플랫폼 채널이 필요하다.

문서가 설명하는 범위#

  • Flutter가 무엇이고 왜 사용하는지
  • 개발 환경을 설정하는 두 가지 방법
  • 첫 번째 앱을 만드는 과정

읽는 시간: 12분 | 난이도: 초급


참고 자료#


문제 상황#

모바일 앱을 만들 때 Android와 iOS를 모두 지원하려면 어떻게 해야 할까요?
두 가지 선택지가 있습니다.
하나는 각 플랫폼용 코드를 따로 작성하는 것이고, 다른 하나는 크로스플랫폼 프레임워크를 사용하는 것입니다.

플랫폼별 개발의 한계#

각 플랫폼마다 다른 언어와 도구를 사용해야 합니다.

Android 앱 → Kotlin/Java
iOS 앱 → Swift/Objective-C
웹 앱 → JavaScript
데스크톱 앱 → 각 OS별 기술 스택

문제는 다음과 같습니다.

  • 같은 기능을 여러 번 구현해야 한다.
  • 플랫폼별 버그를 따로 추적하고 수정해야 한다.
  • UI/UX 일관성을 유지하기 어렵다.
  • 개발팀이 플랫폼별로 나뉘어 커뮤니케이션 비용이 증가한다.

해결 방법#

Flutter는 단일 코드베이스에서 여러 플랫폼을 동시에 지원하는 UI 프레임워크입니다.
Google이 개발했으며, Dart 언어를 사용합니다.

챕터 1: Flutter가 무엇인지 이해하기#

Why#

NOTE

“Android 따로, iOS 따로” 개발하면 같은 기능을 두 번 만들어야 합니다.
예를 들어, 로그인 화면을 만든다고 생각해 보세요.
Android용 로그인 화면을 Kotlin으로 만들고, iOS용 로그인 화면을 Swift로 또 만들어야 합니다.

버그가 생기면요?
Android에서 고치고, iOS에서도 고쳐야 합니다.
두 배의 시간과 노력이 들어갑니다.

그래서 “한 번 작성하고 여러 플랫폼에 배포”하는 방식이 필요합니다.

What#

NOTE

Flutter는 하나의 코드iOS3, Android4, Web5, Windows, macOS, Linux 앱을 만드는 오픈소스 UI 프레임워크입니다.

쉽게 말해서:

  • 코드를 한 번만 작성합니다.
  • 그 코드가 6개 플랫폼에서 모두 동작합니다.
  • Google이 만들고 유지보수합니다.

How#

TIP

Flutter는 Widget이라는 개념으로 UI를 구성합니다.
Widget은 화면에 보이는 모든 것입니다.
버튼, 텍스트, 이미지, 심지어 여백까지 모두 Widget입니다.

가장 간단한 Flutter 앱

void main() {
runApp(Text('Hello, Flutter!'));
}

이게 전부입니다.
runApp()에 Widget을 넣으면 화면에 표시됩니다.

좀 더 실용적인 예시

void main() {
runApp(
MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('내 앱')),
body: Center(child: Text('Hello!')),
),
),
);
}

코드를 분석해 봅시다:

코드역할
runApp()앱을 시작합니다
MaterialAppMaterial 디자인 앱의 틀입니다
Scaffold화면의 기본 구조입니다
AppBar상단 바입니다
Center가운데 정렬합니다
Text텍스트를 표시합니다

Watch out#

WARNING

Flutter는 자체 렌더링 엔진을 사용합니다.
이게 무슨 뜻일까요?

Android의 버튼이나 iOS의 버튼을 직접 사용하는 게 아닙니다.
Flutter가 직접 그림을 그려서 버튼을 표시합니다.

장점: 모든 플랫폼에서 똑같이 보입니다.
단점: 카메라, GPS 같은 기능은 플러그인이 필요합니다.

# pubspec.yaml에 플러그인 추가
dependencies:
camera: ^0.10.0 # 카메라 사용하려면 필요

결론: Flutter는 하나의 코드로 여러 플랫폼 앱을 만들어 개발 비용을 줄입니다.


챕터 2: 개발 환경 선택하기#

Why#

NOTE

Flutter를 사용하려면 먼저 개발 환경을 설정해야 합니다.
”개발 환경”이란 코드를 작성하고 앱을 실행할 수 있는 상태를 말합니다.

설정 방법에 따라 시작 속도가 달라집니다.
빠르게 시작할 수도 있고, 세밀하게 설정할 수도 있습니다.

What#

NOTE

Flutter는 두 가지 설치 방법을 제공합니다.

  1. 빠른 시작(Quick Start): VS Code가 알아서 설치해 줍니다.
  2. 사용자 정의 설정(Custom Setup): 직접 다운로드하고 설정합니다.

입문자라면 빠른 시작을 권장합니다.

How#

TIP

방법 1: 빠른 시작 (권장)

VS Code를 사용하면 Flutter 확장이 SDK 설치를 자동으로 처리합니다.

단계작업소요 시간
1VS Code 설치5분
2Flutter 확장 설치1분
3Flutter SDK 다운로드 (자동)10분
4첫 프로젝트 생성2분

총 20분이면 시작할 수 있습니다.

방법 2: 사용자 정의 설정

SDK를 직접 다운로드하고 환경 변수를 설정합니다.

Terminal window
# 환경 변수 설정 (macOS/Linux)
export PATH="$PATH:$HOME/development/flutter/bin"
항목빠른 시작사용자 정의
설정 난이도쉬움중간
유연성제한적높음
권장 대상입문자경험자

Watch out#

WARNING

설치가 제대로 됐는지 어떻게 확인할까요?
flutter doctor 명령어를 사용합니다.

Terminal window
$ flutter doctor

모든 항목에 체크 표시(✓)가 나타나야 정상입니다.

[✓] Flutter (Channel stable, 3.38.1)
[✓] Android toolchain
[✓] Xcode
[✓] Chrome
[✓] VS Code
[✓] Connected device

체크 표시가 아닌 항목이 있다면?
해당 항목을 클릭하면 해결 방법이 나옵니다.

결론: 입문자는 VS Code + Flutter 확장으로 빠르게 시작하는 것을 권장합니다.


챕터 3: 첫 앱 만들기#

Why#

NOTE

개발 환경이 준비되면 실제로 앱을 만들어봐야 합니다.
읽기만 해서는 절대 배울 수 없습니다.
직접 코드를 작성하고 실행해 봐야 합니다.

Flutter 공식 Codelab은 약 1.5시간 분량입니다.
이 튜토리얼에서는 핵심만 빠르게 다룹니다.

What#

NOTE

Flutter 앱은 lib/main.dart 파일에서 시작합니다.
main() 함수가 앱의 진입점입니다.
runApp() 함수로 화면에 Widget을 표시합니다.

How#

TIP

프로젝트 생성하기

VS Code에서 Ctrl+Shift+P (macOS: Cmd+Shift+P)를 누릅니다.
”Flutter: New Project”를 선택합니다.

또는 터미널에서:

Terminal window
flutter create my_first_app
cd my_first_app
flutter run

프로젝트 구조 이해하기

my_first_app/
├── lib/
│ └── main.dart ← 여기서 코드 작성
├── pubspec.yaml ← 패키지 설정
└── (기타 폴더들)

지금은 lib/main.dart만 기억하세요.
모든 코드는 여기에 작성합니다.

hot reload 체험하기

hot reload는 Flutter의 핵심 기능입니다.
코드를 수정하고 저장하면 앱이 즉시 업데이트됩니다.

// 이 텍스트를 변경해 보세요
child: Text('Hello, Flutter!'),
// ↓ 저장하면 바로 바뀝니다
child: Text('안녕, Flutter!'),

앱을 재시작할 필요가 없습니다.
1초 이내에 화면이 바뀝니다.

Watch out#

WARNING

hot reloadhot restart는 다릅니다.

기능단축키상태사용 시점
hot reloadr유지UI만 바꿀 때
hot restartR초기화상태를 리셋할 때

hot reload는 UI 변경에 적합합니다.
하지만 앱의 상태(예: 변수 값)는 그대로 유지됩니다.

상태까지 초기화하려면 hot restart(대문자 R)를 사용하세요.

결론: 프로젝트를 생성하고 hot reload로 변경사항을 즉시 확인하며 개발합니다.


챕터 4: 학습 경로 파악하기#

Why#

NOTE

첫 앱을 만들었다면 “다음에 뭘 배워야 하지?”라는 질문이 생깁니다.
Flutter는 배울 것이 많습니다.
하지만 순서가 있습니다.

잘못된 순서로 배우면 시간이 오래 걸립니다.
올바른 순서로 배우면 빠르게 익힐 수 있습니다.

What#

NOTE

Flutter 학습의 권장 순서입니다:

Dart 기초 → Widget 기초 → 레이아웃 → 상태 관리 → 네비게이션

하나씩 차근차근 배워야 합니다.
건너뛰면 나중에 막히게 됩니다.

How#

TIP

입문자 권장 학습 순서

순서주제왜 필요한가?
1Dart 언어Flutter의 기본 언어이기 때문
2Widget 기초UI를 만드는 기본 단위이기 때문
3레이아웃Widget을 배치해야 하기 때문
4상태 관리데이터 변경을 화면에 반영해야 하기 때문
5네비게이션여러 화면을 오가야 하기 때문

다른 플랫폼 경험이 있다면?

Flutter 공식 문서에 전환 가이드가 있습니다:

  • Android 개발자 → Flutter for Android developers
  • iOS 개발자 → Flutter for SwiftUI developers
  • 웹 개발자 → Flutter for web developers
  • React Native 개발자 → Flutter for React Native developers

기존 지식을 활용하면 더 빠르게 배울 수 있습니다.

Watch out#

WARNING

가장 흔한 실수: Dart를 건너뛰고 Flutter만 배우려는 것입니다.

Flutter 코드는 Dart로 작성합니다.
Dart를 모르면 코드를 이해할 수 없습니다.

예를 들어, 이 코드가 무슨 뜻인지 모른다면 Dart 공부가 필요합니다:

String? name; // ?가 뭐지?
final count = 0; // final이 뭐지?
await fetchData(); // await가 뭐지?

Dart 기초(변수, 함수, 클래스, 비동기)를 먼저 익히세요.
2시간이면 충분합니다.

결론: Dart 기초부터 시작해서 Widget, 레이아웃, 상태 관리 순으로 학습합니다.


한계#

Flutter는 강력하지만 모든 상황에 적합하지는 않습니다.

  • 네이티브 성능이 중요한 경우: 게임이나 고성능 그래픽 앱은 네이티브 개발이 유리할 수 있습니다.
  • 플랫폼 특화 기능: 최신 OS 기능은 플러그인 지원이 늦을 수 있습니다.
  • 앱 크기: Flutter 앱은 네이티브 앱보다 초기 용량이 큽니다 (최소 약 4-5MB).
  • 학습 곡선: Dart 언어와 Widget 개념을 함께 배워야 합니다.

Footnotes#

  1. Widget(위젯): Flutter에서 UI를 구성하는 기본 단위다. 버튼, 텍스트, 레이아웃 등 모든 것이 Widget이다.

  2. hot reload(핫 리로드): 코드 변경사항을 앱을 재시작하지 않고 즉시 반영하는 기능이다.

  3. iOS(아이오에스): Apple의 모바일 운영체제로 iPhone과 iPad에서 사용된다.

  4. Android(안드로이드): Google의 모바일 운영체제로 다양한 제조사의 스마트폰에서 사용된다.

  5. Web(웹): 웹 브라우저에서 실행되는 애플리케이션 플랫폼이다.

공유

이 글이 도움이 되었다면 다른 사람과 공유해주세요!

Flutter 튜토리얼 1편: Flutter 소개와 첫 앱 만들기
https://moodturnpost.net/posts/flutter/flutter-intro/
작성자
Moodturn
게시일
2026-01-08
Moodturn

목차