개발/Flutter

2-1. 다트 기본 문법1

kkap999 2023. 10. 7. 17:36
728x90

깃허브에 같은 내용 있음. 이쪽이 더 보기 쉬울듯

 https://github.com/rkarud1234/TIL/blob/main/dart/Dart%EA%B8%B0%EB%B3%B8%EB%AC%B8%EB%B2%9501.md

Docs : https://dart.dev/language

웹 개발환경 : https://dartpad.dev/

Java에서와 같이 코드 실행을 위해서는 main() 함수 내부에 작성하면 된다.

void main() {
  print("Hello World!");
}
Hello World!

1. 주석

// 주석1

/**
* 주석2
*/

/// 이것은 문서 주석
/// 메서드나 클래스 위에 작성하면 dartdoc과 같은 문서 생성 도구를 통해 문서를 자동으로 생성해준다.

2. 문장을 써보자

// psvm이 아니다. main함수도 간단하게 선언할 수 있음
void main() {
  // 문장 끝에 세미콜론 필수
  print("Hello World!");
  // print가 new line 처리가 된다.
  // 작은 따옴표로도 string 입력 가능
  print('안녕방가');
}
Hello World!
안녕방가

3. 변수 선언하기

3.1. Dart의 기본 변수형

  • num : 숫자 타입. int 와 double 이 num 타입에 포함될 수 있다.
    • int : 정수
    • double : 실수(소수점)
  • String : 문자열
  • bool : 불리언 타입
// Java와 동일하게 선언과 할당할 수 있다. 동시에도 가능
String name; // 선언
name = '갑갑이'; // 할당

int i = 11; // 선언과 할당
double d = 11.1;

num a = 101;
num b = 101.01;

double c = i; // 에러 : dart는 int -> double의 자동 형변환을 지원하지 않는다.
num d = i; // ok : num으로의 형변환은 가능하다.

3.2. 타입 추론 : var

Dart는 타입을 직접 명시하지 않고 var 로 대체할 수 있는 타입 추론을 지원한다. 일반적으로 var 로 많이 선언한다고 함

var i = 10; // int
var d = 10.0; // double
var s = 'hello'; // string
// 이건 에러가 난다
// 에러 메시지 : A value of type 'int' can't be assigned to a variable of type 'double'.
var i = 10;
double d = i;
  • dynamic 타입
    • 알 수 없는 타입의 값을 할당하는 데 사용할 수 있다. 한 번 선언된 이후에 또 타입 바꿀수도 있음
    • 하지만 타입 안정성을 보장하지 않는다.

3.3. 상수 : final , const

final 또는 const 로 선언하면 값이 변하지 않는 상수값으로 선언할 수 있다.

  • final : 런타임 상수로, 런타임에 값을 할당할 수 있지만 한 번 할당한 이후에는 값 변경이 불가능하다.
  • const : 컴파일 타임 상수로, 컴파일 시점에 이미 값이 다 정의되어 있어야 하며 런타임에 값을 변경할 수 없다.
final int i = 1010;
const name = '갑갑이';

// 변수 출력하는 방법
print('${name}');
print('$name');
print('제 이름은 ${name}입니다.');

3.4. 산술 연산자

  • + : 더하기
  • - : 빼기
  • * : 곱하기
  • / : 나누기(double 타입 반환)
  • ~/ : 몫(int 타입 반환)
  • % : 나머지 연산(int 타입 반환)
// assert : 계산 결과의 참/거짓 결과를 반환. Java의 assert와 비슷하다고 생각하자,,,
// true/false값을 직접 쓰기 위한 용도는 아니고 디버깅용임
// 아래 결과들은 모두 참
assert(2 + 3 == 5);
assert(5 - 2 == 3);
assert(3 * 5 == 15);
assert(5 / 2 == 2.5);
assert(10 / 2 == 5.0);
assert(10 / 2 == 5); // .0 안붙여도 double 선언이나 할당 시 에러 안난다.
assert(5 ~/ 2 == 2);
assert(5 % 2 == 1);
assert('hello' + ' word' == 'hello world');

3.5. 증감, 비교, 논리 연산자

타 언어랑 동일하기에 설명만 적고 패쓰

  1. 증감연산자
    • 후위 연산 : a++, a—-
    • 전위 연산 : ++a . --a
var num = 0;
print(++num); // 1
print(num++); // 1
  1. 비교연산자
    • == : 같다
    • != : 다르다
    • > , < , >= , <= : 크,작,크같,작같
  2. 논리연산자
    • && , || , ! : AND, OR, NOT

3.6. 타입 검사(is , is! )

  • is : 같은 타입이면 ture
  • is! : 다른 타입이면 true
int a = 10;
if(a is int){
  print('정수');
}
  
String text = 'hello';
if(text is! num){
  print('숫자가 아님');
}

3.7. 형변환 키워드 : as

다른 타입끼리의 변환은 불가능하며, 상위 타입으로 형변환할 수 있다.

// double -> int는 상관관계가 없는 다른 타입이기 때문에 변환이 불가능하다.
var a = 30.5;
int b = a as int; // 에러
  
dynamic c = 30.5;
num n = c; // as num 생략가능

4. 함수

반환 타입으로 모든 타입(+void) 지정이 가능하다.

클래스 안에 선언된 함수를 메서드라고 부른다.

반환타입 함수명(매개변수타입 매개변수명){
  // 함수 내용 작성
  return 반환값;
}
// 이렇게 최상단에 선언된 함수를 최상위 함수라고 부르며, 어디에서나 호출 가능
// static 메서드는 최상위 함수처럼 사용할 수 있다.
int sum(int x, int y){
  return x + y;
}

void main(){
  int a = 2;
  int b = 3;
  print(sum(a, b));
}

호출하는 곳에서 anonymous 함수와 람다식도 사용 가능하다.

4.1. 선택 매개변수

함수 정의 시 {} 로 감싼 녀석들은 선택적으로 사용할 수 있는 매개변수이다.

선택 매개변수는 꼭 이런 식으로 사용해줘야 한다.

// 선언 단계에서 기본값 설정해줌
void something({String name = 'gg', int i = 0}){
  print('something');
}

void main(){
  something(name:'aa', i:1);
}

5. 분기와 반복

5.1. 조건문

// if-else
String text = 'hello';

if(text is int) {
	print('정수');
} else if(text is double) {
	print('실수');
} else {
  print('뭘까?');
}
// 삼항연산자도 쓸 수 있음
print((1 is num) ? '정수':'정수 아님'); // 정수
// switch-case
enum Status { Uninitialized, Authenticated, Authenticating, Unauthenticated }

void main(){
  var status = Status.Authenticated;
  
  switch (status) {
    case Status.Uninitialized :
      print('초기화됨');
      break;
    case Status.Authenticated :
      print('인증됨');
      break;
    case Status.Authenticating :
      print('인증중');
      break;
    case Status.Unauthenticated :
      print('미인증');
      break;
  }
}

5.2. 반복문

void main(){
  var items = ['apple', 'banana', 'grape'];
  
  for(var i = 0; i < items.length; i++){
    print(items[i]);
  }
}

'개발 > Flutter' 카테고리의 다른 글

VS Code 기반으로 Flutter 개발환경 셋팅  (0) 2023.10.04