subindev 님의 블로그

[Flutter] #1 Dart 기본 문법 - 타입추론, 상수, 연산자 본문

앱개발/Flutter

[Flutter] #1 Dart 기본 문법 - 타입추론, 상수, 연산자

subindev 2025. 1. 3. 17:45

Dart 프로그래밍 기초

 

1.  데이터와 변수


데이터란?

데이터는 사물이나 현상에서 얻어진 사실 또는 값을 의미합니다. 우리가 처리하고 다루는 정보들이 바로 데이터입니다.

변수란?

변수는 값을 저장할 수 있는 메모리 공간을 의미합니다. 즉, 값을 저장해 놓고 나중에 재사용하거나 변경할 수 있는 메모리 공간을 이름으로 할당한 개념입니다.

데이터 타입이란?

데이터 타입은 메모리 공간에 들어간 값의 형태를 의미합니다. 예를 들어, 정수형, 실수형, 문자열 등으로 데이터를 구분할 수 있습니다.

void main() {

    int n1 = 10;
    double d1 = 10.0;
    bool b1 = true;
    String s1 = '홍길동'; // 홑따옴표 권장 사항

}​

 

 

2.  타입 확인 및 타입 추론


타입 확인

타입 확인은 프로그램에서 예상치 못한 타입의 값이 들어올 경우, 오류를 방지하고 디버깅을 용이하게 해줍니다. Dart에서는 runtimeType을 사용하여 변수의 타입을 확인할 수 있습니다.

// 코드의 시작점
void main() {

  int n1 = 10;
  double d1 = 10.0;
  bool b1 = true;
  String s1 = '홍길동'; // 홑따옴표 권장 사항

  print('정수 : ${n1.runtimeType}');
  print('실수 : ${d1.runtimeType}');
  print('정수 : ${b1.runtimeType}');
  print('정수 : ${s1.runtimeType}');
}

타입 추론

타입 추론은 개발자가 변수의 타입을 명시하지 않아도, 자동으로 적절한 타입을 결정해주는 기능입니다. Dart에서는 var와 dynamic 키워드를 통해 타입 추론을 제공합니다.

void main() {

  var n1 = 1;
  var d1 = 10.1;
  var b1 = true;
  var s1 = '홍길동';

  print(n1.runtimeType);
  print('실수 : ${d1.runtimeType}');
  print('부울 : ${b1.runtimeType}');
  print('문자열 : ${s1.runtimeType}');

  print('------------------------------------');
  // var 키워드로 한 번 초기화된 데이터 타입은 다른 데이터 타입으로 변경이 불가능 하다.
  // n1 = 20.1; 오류 발생

  dynamic dyN1 = 100;
  dyN1 = 20.5;
  print('dyN1 ${dyN1.runtimeType}');
  // dynamic 타입은 모든 타입을 받을 수 있고 다른 타입으로 변경도 가능하다.
  
} // end of main

 

3.  상수 (Constant)


상수란?

상수는 한 번 할당된 값이 변경되지 않는 변수입니다.

Dart에서는 final과 const 키워드를 사용하여 상수를 정의합니다. 두 키워드의 차이점은 컴파일 시점에 값이 결정되는지, 런타임 시점에 값이 결정되는지에 있습니다.

void main() {
  
  final int n1 = 10;
  // n1 = 100; 컴파일 시점에 오류 발생

  const double d1 = 101.0;
  // d1 = 20.1; 변경 불가능

  // 상수 사용시 데이터 타입 역시 생략 가능 하다.
  final a1 = 100;
  const b1 = true;
  
} // end of main

그렇다면 어떤 상황에서 어떤 상수 타입을 쓰는걸까 ?

 

final과 const 사용

 

1. final을 사용하는 경우:

- 값이 실행 중에 결정되어야 하는 경우 사용합니다.

- 예: 현재 시간, 사용자 입력 등.

더보기
더보기
더보기
더보기

final today = DateTime.now();

 

2. const를 사용하는 경우:

- 값이 컴파일 시점에 고정될 수 있을 때 사용합니다.

- 예: 상수 값, 변하지 않는 수학적 상수, 기본 설정 값 등.

 

 

4. 연산자 (Operators)


산술 연산자

산술 연산자는 두 개 이상의 수를 사용하여 수학적인 연산을 수행하는 연산자입니다.

나머지 연산자

나머지 연산자는 나누기 연산에서 나머지를 계산하는 연산자입니다. Dart에서 /는 실수 나누기이고, ~/는 정수 나누기를 의미합니다.

// 연산자
// 산술 연산자
void main() {
  // 더하기
  print('3 + 2 = ${3 + 2}');
  print('3 - 2 = ${3 - 2}');
  print('3 * 2 = ${3 * 2}');
  print('3 / 2 = ${3 / 2}');

  // 나머지 연산자
  print('3 % 2 = ${3 / 2}');
  print('5 ~/ 2 = ${5 ~/ 2}');
}

비교 연산자

비교 연산자는 두 값 간의 관계를 비교하여 true 또는 false를 반환합니다.

// 비교 연산자
// 두 개의 값을 비교하여 결과를 참/거짓을 판별할 때 사용한다.
void main() {
  // 같다
  print(' 2 == 3 -> ${2 == 3}'); // false
  // 다르다
  print(' 2 != 3 -> ${2 != 3}'); // true

  // 왼쪽 값이 오른쪽 값보다 작다
  print(' 2 < 3 -> ${2 < 3}'); // true
  // 왼쪽에 있는 값이 오른쪽에 있는 값보다 크다
  print(' 2 > 3 -> ${2 > 3}'); // false

  // 왼쪽에 있는 값이 오른쪽에 있는 값보다 작거나 같다
  print(' 2 <= 3 -> ${2 <= 3}'); // true

  // 왼쪽에 있는 값이 오른쪽에 있는 값보다 크거나 같다 -- false
  print(' 2 >= 3 -> ${2 >= 3}'); // false
}

논리 연산자

논리 연산자는 true 또는 false 값을 사용하여 논리적인 연산을 합니다. 주요 논리 연산자는 AND, OR, NOT입니다.

// 논리 연산자
void main() {
  bool isRainy = true;
  bool hasUmbrella = false;

  // and
  //       T    &&      T   ---> True
  print(isRainy && hasUmbrella);
  print(hasUmbrella && isRainy);

  // OR
  print(isRainy || hasUmbrella);
  print(hasUmbrella || isRainy);

  // NOT
  print(!isRainy);
}



 

 


Quiz  구간

 

1. [객관식] 변수와 데이터 타입

문제

다음 중 정수(int) 타입에 해당하는 값만 묶인 것은 무엇일까요? 1

  1. 1, 0, 3
  2. 3.14, 0.5, -2.0
  3. "Hello", "Dart", "Flutter"
  4. true, false

2. [객관식] 변수 선언

문제

Dart에서 아래 코드가 하는 일을 올바르게 설명한 것은?  1

var age = 20;

  1. 정수 타입의 age 변수를 선언하고 초기값으로 20을 대입한다.
  2. 문자열 타입의 age 변수를 선언하고 초기값으로 "20"을 대입한다.
  3. final 키워드를 사용해 변경 불가능한 변수를 선언한다.
  4. 변수 타입을 강제로 double로 지정한다.

 


3. [주관식] 기본 연산자

문제

“나머지 연산자” 를 나타내는 연산자는 무엇인가요? 

정답
%


4. [빈칸 채우기] 데이터 타입

문제

Dart에서 소수점이 있는 실수(예: 3.14)를 저장하려면, ______ 타입을 사용해야 합니다.

정답
double

5. [코드 실행 결과 예측] 문자열 연산

void main() {
  String greeting = "Hello";
  String name = "Dart";
  print(greeting + " " + name);
}

문제

위 코드를 실행하면 콘솔에 어떤 문자가 출력될까요?

정답
Hello Dart

6. [주관식] 변수 수정

문제

아래 코드에서 myAge의 최종 값은 몇일까요?

 

void main() {
  int myAge = 10;
  myAge = myAge + 5;
  myAge = myAge - 2;
  print(myAge);
}

정답
13

7. [참/거짓] 비교 연산자

문제

다음 문장들을 보고 참(True)인지 거짓(False)인지 구분하세요.

  1. 4 > 2
  2. 3 == 2
  3. 10 >= 10
  4. 5 < 1

정답
True , False, True, False

8. [객관식] 논리 연산자

문제

true && false || true 의 결과는 무엇일까요?

  1. true
  2. false

정답
true

9. [코드 실행 결과 예측] 나머지 연산자

void main() {
  int x = 14;
  int y = 5;
  print(x % y);
}

문제

위 코드의 출력 결과는 얼마일까요?

 

정답
4

10. [빈칸 채우기] 상수 키워드

문제

한 번 할당하면 값 변경이 불가능한 컴파일 시점 상수는 Dart에서 ______ 키워드로 선언합니다.

정답
const