본문 바로가기
스파르타/Flutter

[Flutter] Dart 기본 개념 - ( week - 1 )

by bakcoding_sparta 2023. 4. 9.
void main() {
  var count = 'Count';
  print('$count');
}

// Comments

Main

main 함수는 Dart에서 처음 시작 시 호출하는 약속된 함수이다.

앞에 붙은 void 자리의 경우 함수가 실행 종료될 때 반환되는 값의 타입을 표시한다. void는 반환하는 값이 없음을 뜻한다.

 

Comments

주석, 코드가 실행될 때 컴퓨터는 주석을 읽지 않기 때문에 주로 메모할 때 사용한다.

// 문자를 입력하면 그 뒤에 작성된 코드는 주석으로 처리된다.

 

Print

소괄호 안쪽에 있는 값을 콘솔 창에 출력한다. 일반적으로 코드가 정상적으로 동작하는지 확인할 때 사용한다.

 

Semicolon

Dart에서는 문장 마지막에 세미콜론 ; 를 붙여주어야 한다. 가장 흔하게 발생하는 에러가 문장 끝에 세미콜론이 빠진 경우가 많으므로 해당 부분을 확인하도록 한다.

 

Variable

변수, 어떤 값을 저장하는 공간이다.

값을 저장할 때는 저장할 값의 타입에 따라 선언방식이 다르다.

void main() {
  var a = 1;
  String b = "hello world";
  String? c = null;
  const d = 1;
  final e;
  e = 2
  print(a);
}
  • var : 저장되는 값에 따라 타입이 자동으로 지정된다.
  • String : 문자를 저장할 수 있다.
  • String? : 문자 또는 비어있는 상태인 null이 될 수 있다.
  • const : 처음에 변수를 저장하면 이후에 변수에 다시 값을 넣을 수 없다.
  • final : 선언하고 나중에 값을 저장할 수 있으나 한 번 저장된 후에는 변경할 수 없다.

변수명을 작명할 때 규칙

  • 영문/ _/ $/ 숫자만 사용이 가능하다.
  • 숫자로 시작할 수 없다.
  • CamelCase를 주로 사용한다. 
    • 띄어쓰기 대신에 대문자를 사용한다. ex) myNameString
    • 파일명의 경우 스네이크 케이스를 쓰기도 한다. ex) this_file_for_test.dart

if

조건에 따라서 실행할 코드를 분기할 때 사용한다.

else if, else와 함께 사용된다.

  if (bool1) {
    // bool1이 true면 실행
  } else if (bool2) {
    // bool1이 false이고, bool2가 true이면 실행
  } else if (bool3) {
    // bool1과 bool2가 false이고, bool3가 true이면 실행
  } else {
    // bool1, bool2, bool3가 모두 false이면 실행
  }

 

for

주어진 횟수만큼 반복해서 동작할 때 사용된다.

for (int i = 0; i < 5; i++) {
    print('hello $count + ${i}');
  }
  • i = 0 : i 값이 0부터 시작한다고 정의한다. 해당 for 문장이 실행될 때 한 번만 동작한다.
  • i < 5 : i 가 5보다 작은 경우에만 코드가 반복되도록 한다.
  • { } : 중괄호 내부에 반복할 동작을 작성한다.
  • i++ : 내부의 코드가 끝난 후 i 값을 증가시키고 다시 코드의 처음으로 돌아간다. 이때 i < 5부터 코드가 진행된다.

function

함수, 여러 코드를 묶어둔 영역이다.

void main() {
  print("1. 시작");
 
  say();
 
  print("4. 종료!");
}

void say() {
  print("2. 안녕");
  print("3. Hello");
}

void는 함수가 반환할 타입이고 say는 함수의 이름이다.

중괄호 내부는 함수가 호출될 때 실행시킬 동작이 작성된다.

 

  • 코드가 실행되면 main 내부부터 동작하므로 콘솔창에는 '1. 시작'이 출력된다.
  • 다음 줄인 say() 함수가 호출되면서 내부 코드인 '2. 안녕' 그리고 '3. Hello'가 출력된다.
  • 마지막으로 '4. 종료!'가 출력되면서 메인 함수가 종료된다.

 

화살표 표현식을 사용해서 함수를 단축해서 작성할 수 있다.

say() {
  return "hello";
}

sayArrow() => "hello";

sayArrow는 say와 동일하게 동작한다.

 

Class

클래스, 변수와 함수를 모아두는 틀로 일반적으로 클래스의 이름은 대문자로 시작한다.

class Bread {
  // 생성자 함수 (클래스명과 똑같음. 클래스의 객체가 생성될 때 호출되는 함수)
  Bread(String core) {
    content = core; // 전달 받은 core를 content에 넣어줍니다.
  }

  // Bread 클래스가 가진 content 속성 (클래스 내의 변수)
  String? content;

  // Bread 클래스가 가진 getDescription 메소드 (클래스 내의 함수)
  String getDescription() {
    return "맛있는 $content빵입니다.";
  }
}

void main() {
  Bread bread = Bread('팥'); // bread : Bread의 객체(instance)
  print(bread.getDescription()); // 맛있는 팥빵입니다.
}

속성(Property), 메서드(Method), 생성자(Constructor)로 구성된다.

  • 속성 : 클래스 내의 변수
  • 메서드 : 클래스 내의 함수
  • 생성자 : 클래스 명과 동일한 함수

 

Extends

상속, 클래스를 상속하면 기존의 클래스 내용을 그대로 사용하면서 추가로 코드를 작성해서 클래스를 확장하여 사용하는 것이 가능하다.

 

class TousLesJours {
  String madeBy = 'ToursLesJours';
}

class Bread extends TousLesJours {
  String myName = 'Bread';
}

class Cookie extends TousLesJours {
  String myName = 'Cookie';
}

void main() {
  Bread bread = Bread();
  Cookie cookie = Cookie();

  print(bread.madeBy + bread.myName); //ToursLesJoursBread
  print(bread.madeBy + cookie.myName); //ToursLesJoursCookie
}

 

공통적으로 사용할 코드가 있다면 상속을 통해서 파생 클래스를 만들고 필요한 코드를 재사용할 수 있다.

 

Dart의 모든 것은 Class이며 Widget이라는 단위들도 모두 Class로 만들어진 것들이다.