1. Dart 개발환경 설정
Dart 코드를 실행하는 방법은 여러 가지가 있다.
- Dart 설치: 공식 사이트(https://dart.dev/get-dart)에서 다운로드 가능
- 실행 방법:
1. VS Code + Dart 플러그인 사용
2. DartPad(웹에서 실행 / dartpad.dev)
3. 터미널에서 실행 (dart run 파일명.dart)
우선적으로 DartPad를 이용해서 공부를 하다가 콘솔로부터 값을 입력 받아야 하는 부분은 DartPad에서 Support 해주지 않기 때문에 마무리 예제 부분에서는 Dart를 설치하였다.
2. Dart 기본 문법
✔️ 변수 및 데이터 타입
Dart는 정적 타입의 언어이며, 변수 타입을 명시적으로 지정할 수 있다.
void main() {
int num1 = 10; //정수형
double num2 = 42.195; //실수형
String text = "Hello Dart"; //문자형
bool isDart = true; //불리언 ( true / false )
var autoType = 100; //타입 자동 지정 ( 현재 int )
dynamic flexible = "변경 가능"; // 어떤 값이든 가질 수 있는 형태
print(num1);
print(num2);
print(text);
print(isDart);
print(autoType);
print(flexible);
}
✔️ 리스트(List) & Map
배열처럼 여러개의 값을 가지고 처리 할 수 있다.
void main() {
List<int> numbers = [1, 2, 3, 4, 5]; //정수 리스트
numbers.add(6); // 리스트에 6 요소 추가
print(numbers);
numbers.remove(2); //리스트에서 2의 요소 제거
print(numbers);
numbers.remove(2); //없어도 동작 자체는 문제 없음.
print(numbers);
}
void main() {
Map<String, int> prices = {"Book": 12000, "Note": 2000}; //맵 선언 후 키 : 저장값 설정
prices["Hat"] = 6000; // 새 데이터 추가
print(prices);
prices.remove("Note"); // Note 데이터 삭제
print(prices);
prices.clear(); //prices Map 초기화
print(prices);
}
✔️ 제어문 ( if / for / while / switch )
조건문 처리, 반복문 처리를 할 수 있다.
void main() {
int score = 85;
// if-else 문
if (score > 90) {
print("1등급");
} else if (score > 80) {
print("2등급");
} else {
print("3등급 이하");
}
//for 루프
for (int i = 0; i < 10; i++) {
print(i);
}
//while 루프
int j = 0;
while (j < 10) {
print(j);
j++;
}
String grade = "C";
//switch 문
switch (grade) {
case "A":
print("우수");
case "B":
print("준수");
default:
print("더 노력 필요");
}
}
✔️ 함수
공통된 부분은 따로 빼서 여러번 사용할 수 있도록 함수를 만들 수 있다.
int add(int a, int b) {
return a + b;
}
// return 대신 => 사용 가능 ( 함수가 한 줄로 끝날 경우 )
int multiply(int a, int b) => a * b;
void main() {
print(add(3, 5)); // 8
print(multiply(4, 6)); // 24
}
✔️ 사용자 입력 받기
추가 예제 실행을 위해서 이 단계 부터는 Dart를 설치해서 terminal에서 작업 진행이 필요하며, 위에 Dart 링크를 작성해 두었기 때문에 해당 링크를 참고하여 Dart를 각자의 OS에 맞는 환경에 설치를 하도록해서 진행하자.
Dart에서 콘솔 입력을 받으려면 stdin.readLineSync()를 사용한다.
import 'dart:io';
void main() {
print("숫자를 입력하세요:");
String? input = stdin.readLineSync(); //사용자 입력 값 ( ? 에 대해서는 추후 진행 )
int number = int.parse(input!); //사용자가 입력한 값을 int로 형변환
print("입력한 숫자는 $number 입니다.");
✔️ 테스트 예제 코드
위에서 진행했던 내용을 토대로 충분한 실습을 진행한 후, 테스트 예제를 진행해보도록 하자.
1. 1부터 10까지 숫자 중 랜덤한 숫자를 맞추는 프로그램 구현 ( 랜덤함수 만드는 방법 하단 참조 )
import 'dart:math'; //random 사용을 위해 math import
void main() {
int secretNumber = Random().nextInt(10) + 1; // 0 ~ 9 까지 생기기 때문에 여기서 +1
print(secretNumber)
}
2. 3번의 기회 ( for 문 사용 )
3. up / down 게임처럼 if문 사용
4. 3번 안에 맞췄으면 "정답입니다!" 출력 3번의 기회가 끝났으면, "실패! 정답은 X 였습니다. " 출력
import 'dart:math';
import 'dart:io';
void main() {
int secretNumber = Random().nextInt(10) + 1;
print("1부터 10 사이의 숫자를 맞혀보세요! (총 3번 시도 가능)");
for (int i = 0; i < 3; i++) {
stdout.write("숫자를 입력하세요: ");
String? input = stdin.readLineSync();
//공란이거나 아무것도 입력을 하지 않았을 경우의 예외처리
if (input == null || input.isEmpty) {
print("입력이 비어 있습니다. 다시 입력하세요.");
continue;
}
int? number;
//숫자가 아닌 문자를 입력했을 때의 예외 처리
try {
number = int.parse(input);
} catch (e) {
print("숫자만 입력하세요.");
continue;
}
if (secretNumber > number) {
print("$number보다 큽니다.");
} else if (secretNumber < number) {
print("$number보다 작습니다.");
} else {
print("🎉 정답입니다!");
return;
}
if (i == 2) {
print("😢 실패! 정답은 $secretNumber였습니다.");
}
}
}
기본 문법에서 진행했던 내용 외에 try-catch를 통해서 예외처리를 진행했다. 처음하는 사람들의 경우에는 최대한 비슷하게만 진행해도 되며, 해당 부분으로 우선적으로 개념만 잡고 코드랑 익숙해지면 되니 못했다 하더라도 실망할 필요는 없다.
3. var 와 dynamic의 차이 점
F대략적으로 코드랑 친숙해졌으면, 위에서 언급한 var와 dynamic에 대한 차이점에 대해서 정리하고 넘어가도록 하자.
구분 | var(자동 타입 추론) | dynamic ( 완전한 동적 타입 ) |
초기화 시 타입 | 변수 선언시 타입 자동 결정 | 어떤 타입이든 저장 가능 |
타입 변경 가능 여부 | ❌ 초기 타입 고정( 변경 불가 ) | ✅ 타입 변경 가능 |
컴파일 시 타입 체크 | ✅ 타입 체크 가능 ( 오류 사전 방지 ) | ❌ 타입체크 안함 ( 실행 중 오류 가능 ) |
실행 속도 | ⏩ 빠름 (타입이 고정되어 최적화 가능 |
🐢 상대적으로 느림 (유형 검사 필요) |
- var 사용 추천 -> 타입이 확실한 경우 (대부분의 경우 var 사용)
- dynamic 사용 추천 → 정말 타입을 몰라야 할 때 (예: JSON 파싱, API 응답 처리 등)
- 정리하자면, var를 기본적으로 사용하고, 꼭 필요한 경우에만 dynamic을 사용하면 된다.
✔️ var 예제 ( 초기 타입 고정 )
void main() {
var value = "Hello"; // String으로 타입 결정
// value = 123; ❌ 오류 발생! (초기 타입이 String이라 숫자 할당 불가)
print(value); // 출력: Hello
}
- var는 초기 값이 주어지면 타입이 고정됨.
- 이후 다른 타입의 값을 할당하려 하면 컴파일 오류 발생
✔️ dynamic 예제 ( 타입 변경 가능 )
void main() {
dynamic value = "Hello"; // 초기에는 String
print(value); // 출력: Hello
value = 123; // 숫자로 변경 가능
print(value); // 출력: 123
value = true; // 불리언으로 변경 가능
print(value); // 출력: true
}
- dynamic은 어떤 타입이든 변경 가능!
- 하지만 실행 중 타입 오류 가능성이 있음 → 타입 안정성이 떨어짐
이렇게 기본 문법에 대해서 알아보았다. 추가 적인 내용이 필요한 경우에는 댓글을 요청드리고, 틀린 부분이 있다면 이것 또한 댓글로 알려주시면 수정하도록 하겠습니다!
'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를 공부하게 된 이유 + Dart 특징 (1) | 2025.02.14 |