개발 환경
- OS: Linux (Ubuntu)
- IDE: VS Code, Android Studio
- 목표: Flutter + Dart 개발 환경 구성
방법 ① VS Code 마켓플레이스 기반 설치 (공식문서)
1. Flutter 확장 프로그램 설치
VS Code 실행 후 (Ctrl+P)에서 아래 명령어 실행으로 확장 설치한다.
`ext install Dart-Code.flutter`
✔️ Flutter 확장 설치 시 Dart 확장도 함께 설치된다.
2. Flutter SDK 자동 설치
- (Ctrl + Shift + P) `Flutter: New Project` 실행
- Flutter SDK 미설치 상태일 경우 SDK 다운로드 경로 선택 요청
- VS Code가 자동으로 Flutter SDK 다운로드 및 설정 진행
- 몇 분 정도 소요 예정된다. 터미널 창, VSCode 다시 시작 시 Flutter 사용 가능하다.
방법 ② Git Clone 기반 Flutter SDK 설치 (수동 방식)
1, Flutter SDK 다운로드
git clone https://github.com/flutter/flutter.git -b stable ~/flutter
2. 환경 변수 수동 설정
echo 'export PATH="$PATH:$HOME/flutter/bin"' >> ~/.bashrcsource ~/.bashrc
확인: `flutter --version`
(공통) flutter doctor실행
- Flutter 개발 환경 점검 도구
- 현재 시스템이 Flutter 개발을 수행할 수 있는 상태인지 자동으로 진단한다.
[✓] Flutter (Channel stable) // Flutter SDK 설치 여부 확인
[✓] Dart // Dart SDK 상태 확인
[✓] VS Code // DE 연동 상태 확인 (VS Code, Android Studio 등)
// 플랫폼별 빌드 환경 확인
[!] Android toolchain
[✓] Linux toolchain
[✓] Chrome
- [✓] : 정상
- [!] : 추가 설정 필요
- [✗] : 필수 구성 요소 없음
Android 개발 환경 (공통)
- 웹 / Linux 데스크톱 앱만 개발한다면
→ Android Studio는 필수 아님 - Android 앱을 개발한다면
→ 사실상 필수
핵심 역할: Android SDK 제공자
- IDE라기보다 Android 빌드 인프라라고 보는 게 정확하다
1. Android Studio 설치 (공식문서 표준)
- 공식 사이트 에서 설치
- 압축 해제 후 파일 경로로 이동해서 `bin/studio.sh` 입력
- 실행 및 SDK 설치 : Help imporve Android Studio 외에 모두 [Next]를 선택해도 무관합니다.
2. Android Studio 없이 SDK만 설치
👍️ 장점
- 설치 구성 최소화 (가볍고 명확)
- SDK 버전 및 경로를 직접 통제 가능
- CI/CD, 서버 환경에 매우 적합
- IDE 의존성 제거
👎️ 단점
- SDK / Build Tools / Platform을 직접 관리
- Emulator 설정이 불편
- 초기 세팅 시 실수 가능성 존재
Android Studio + VS Code 조합을 표준으로 시작하는 것을 권장한다.
- 안정성 기준에서 공식 지원하며, 초기 도입에 설명 비용이 적다.
- IDE 커스터마이징보다 빌드 성공, 디바이스 실행, 환경 차이 최소화의 중요성이 더 높다.
- 도입 안정화 이후 전환을 제안한다 : CI/빌드 서버/ 고급 사용자
(공통) 설치 이후
1. android studio 플러그인, SDK 설치
- 초기 화면 > Plugin > Flutter 플러그인 설치
- Customize > All settings... > sdk 검색 > Android SDK > [SDK Tools] 탭 메뉴 클릭 > [Android SDK Command-line Tools] 설치 및 체크 활성화
완료 후 android studio 를 재시작 한다.
2. 라이선스 동의
`flutter doctor --android-licenses` 라이선스를 읽고, Accept 동의
3. Java 21 버전 (기본 세팅) 으로 사용해도 무관하다
4. Linux desktop 앱 개발 계획 여부에 따라 추가 설치를 하지 않아도 무관하다.
Dart 기본 개념 정리
정적 타입 기반 언어, JIT(개발 중) + AOT(배포 시) 컴파일, 객체지향 + 함수형 패러다임 혼합
1. 기본 변수 선언
String name = 'Alice';
int age = 20;
bool isAdmin = false;
타입 추론 (var)
var name = 'Alice'; // 컴파일 타임에 String으로 고정
- var는 동적 타입이 아니다.
- 한 번 추론된 타입은 변경 불가하다.
변경 불가 변수
final now = DateTime.now(); // 런타임 상수
const pi = 3.14; // 컴파일 타임 상수
- final: 한 번만 할당
- const: 컴파일 시점에 값 결정
2. Null Safety가 기본이다.
String name; // ❌ null 불가
String? nickname; // ✅ null 허용
null 체크
if (nickname != null) {
print(nickname.length);
}
null 연산자
nickname?.length; // null-safe 접근
nickname ?? 'guest'; // 기본값
3. 함수 기본 문법
int add(int a, int b) {
return a + b;
}
화살표 함수
int add(int a, int b) => a + b;
선택 / 이름 있는 파라미터
void greet({required String name, int age = 0}) {}
Flutter API의 대부분이 이름 있는 파라미터를 사용
4. 컬렉션 (List / Map)
List
List<int> numbers = [1, 2, 3];
Map
Map<String, int> scores = {
'math': 90,
'eng': 80,
};
Collection if / for
var items = [
if (isAdmin) 'admin',
for (var n in numbers) n * 2,
];
5. 클래스와 객체
모든 것이 객체
생성자 문법이 간결
Flutter 위젯 구조 이해에 필수
class User {
final String name;
int age;
User(this.name, this.age);
void grow() {
age++;
}
}
6. 불변 객체 개념 (중요)
Dart에서는 값 변경보다 새 객체 생성이 일반적이다.
final list = [1, 2, 3];
final newList = [...list, 4];
Flutter UI 갱신 원리와 직결됨
7. 비동기 처리 (async / await, Future)
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 1));
return 'data';
}
final data = await fetchData();
Dart는 단일 스레드 이벤트 루프
Future, async, await 개념 필수