본문 바로가기
Language/Dart

[Dart] 기본 문법 정리

by 삼준 2023. 4. 1.
반응형

0. 문장은 세미콜론으로 끝난다.

 

1. 주석

한 문장 - //
여러 문장 - /**내용**/
문서 - ///


2. 변수

2.1. 타입 명시 하기
기본 제공 자료형(Data Type)에는 int, double, String, bool 이 있음.
사용자 정의 자료형 사용가능.
int, double은 num으로 선언 가능함.

2.2. 타입 명시 안 하기
변수 선언 시 type 명시하지 않고 var로 대체 가능함.
일반적으로 많이 사용.

2.3. 상수 (값이 변하지 않는 경우)
앞에 final, const 붙이기


3. 연산자

3.1. 산술 연산자
+, -, *, /,  ~/(몫), %(나머지)가 있으며, +의 경우 String concat(문자열 붙이기)에도 사용 가능함.

3.2. 증감 연산자
++, --
식 앞 뒤 모두 붙일 수 있음.

3.3. 비교
==, !=, >, <, >=, <=

3.4. 논리연산자
&&, ||, ==, !, !=
boolean 타입으로 결과 반환함.

3.5. 타입 검사
is, is!
[ 변수명 is 타입 ]의 형태로 사용함.

3.6. 형변환
as
다른 타입끼리 변환 불가하며 연관이 있어야 함(상속).
공식 문서에 따르면 객체가 특정 타입이 확실할 때 형변환하도록 하고 있음.
정말 확실하지 않는 한 is를 먼저 사용하고 as를 사용하는 게 바람직함.


4. 함수

C문법과 동일.
문자열 내에 '$변수'또는 '${변수}'를 사용해 포맷팅 가능함.
4.1. 익명 함수
이름이 없음.
(인수) {내용};

4.2. 람다식
(인수) => {내용};

4.3. 선택 매개변수
{매개변수}
매개변수를 {}로 감싸면 선택 매개변수가 되며, 선택적으로 사용 가능해짐.
선택 매개변수에 값을 주고 싶다면 매개변수의 이름을 이용해 "매개변수명" : "값"으로 넘겨줘야 함.
default 값 설정이 가능함. {매개변수 = 값}


5. 조건문

5.1. if-else
C문법과 동일.

5.2. 삼항 연산
C문법과 동일.

5.3. switch case
C문법과 동일.


6. 반복문

6.1. for
C문법과 동일.

6.2. while
C문법과 동일.

6.3. do while
C문법과 동일.

7. 클래스(Class)

기본 개념과 용어는 다른 언어들과 동일함.
7.1. 접근 지정자
멤버 변수의 공개 범위 결정
_(언더바)를 붙여 구분하며, 붙이면 private, 안 붙이면 public의 의미를 가짐.

7.2. 생성자(Constructor)
인스턴스화하는 방법을 제공하는 일종의 메서드.
[ 클래스명(매개변수) ]의 형태로 사용함.

7.3. 게터, 세터(Getter, Setter)
private 변수에 접근하기 위해 만들어주는 메서드.
[ get  변수명 {내용} ]
[ set  변수명 (매개변수) {내용} ]의 형태가 일반적임.
기존에 써왔듯이
[ void get변수명() {내용} ]
[ void set변수명(매개변수) {내용} ]의 형태로 써도 상관없음.

class Student{
  String _name;
  
  ...중략...
  
  get name{
    return this._name;
  }
  
  set name(String name){
    this._name = name;
  }
}


7.4. 상속
extends
부모는 super, 자식은 sub
@override 어노테이션(?)을 이용해서 메서드 재정의가 가능함.

7.5. 추상 클래스
추상 메서드(선언만 있는 메서드)를 포함하는 클래스.
implements 키워드로 구현됨.
여러 클래스가 한 번에 구현될 수 있고, 추상 클래스를 구현할 때는 모든 추상 메서드가 재정의 되어야 함.

7.6. 믹스인(Mixin)
(필자가 Dart를 공부하며 처음 알게 된 개념으로, 여기저기 돌아다니며 이해한 바를 바탕으로 최대한 쉽게 써보고자 한다.)
자식 클래스에서  본인의 부모 클래스가 가진 속성뿐 아니라 다른 계층에 있는 클래스들의 속성도 필요한 경우에 사용되는 방법으로, Dart에서는 부모 클래스를 하나 밖에 못 가지기 때문에 생겼음("extends" 뒤에 쓸 수 있는 클래스는 한 개뿐임).
[ mixin 믹스인명 {내용} ]의 형태로 믹스인을 생성해 두고 (class 정의랑 똑같고 키워드만 바뀜.)

mixin CanRun {
  void run() {
    print("뛰는 중...");
  }
}

mixin CanShoot {
  void shoot() {
    print("슈팅하는 중...");
  }
}

[ class 클래스명 extends 부모클래스명 with 믹스할 (믹스인/클래스) 명 {내용} ]의 형태로 사용하여 믹스함.

class Striker extends FootBallPlayer with CanRun, CanShoot {
  @override
  void play() {
    run();
    shoot();
  }
}

(믹스인의 속성을 클래스에게 물려주는 것을 필자 임의대로 믹스라고 명명하였음. 믹스는 클래스, 믹스인 모두로부터 가능함.)
주의) 같은 이름을 가진 메서드가 여러 개 믹스된 경우, 뒤에 믹스하는 믹스인의 메서드가 유효함.
+ 7.6.1. on 키워드
믹스인을 특정 클래스에만 믹스시키고 싶다면 사용하는 키워드.
[ mixin 믹스인명 on 클래스명 ]의 형태로 사용함.

mixin CanShoot on Striker{ ... }

 

8. 열거형(Enum)

[ enum 열거형명 {열거1, 열거2, ...} ]의 형태로 정의되며 상수처럼 사용 가능함.


9. 컬렉션(Collection)

9.1. List
Dart에는 배열(Array)이 없음.
[ List<타입> 리스트명 = [ 원소1, 원소2, ... ] ] 의 형태로 정의함.

+ 9.1.1. dynamic 타입
타입란에 dynamic을 사용하면 여러 타입을 한 리스트에 넣는 게 가능함.
일반 변수 선언(var)으로 리스트 생성 시 해당 타입이 사용됨.

9.2. Spread
...(점 세 개)
컬렉션을 펼쳐줌. 다른 컬렉션 안에 컬렉션을 삽입할 때 사용됨.
[ var 리스트명 = [ 요소1, ...기존리스트, 요소2 ] ] 의 형태로 사용 가능함.

var items = ['a', 'b', 'c'];
var items2 = ['d', ...items, 'e']; //d, a, b, c, e


9.3. Map
순서가 없고 key-value의 쌍으로 이루어져 있어 탐색이 빠름.
[ var 맵명 = { 키1:값1, ...  }] 의 형태로 정의함.
[ Map<타입, 타입> 맵명 = { 키1:값1, ... }] 과 같음.

9.4. 집합(Set)
중복이 없음.
add(), remove() 메서드로 추가/삭제 가능함.
contains() 메서드로 집합에 있는지 없는지 확인 가능함.
[ var 집합명 = <타입> { 요소1, 요소2, ... } ] 의 형태로 정의함.
주의) <타입>이 빠지면 Map으로 인식함.


10. 기타

10.1. 계단식 표기법
.. (점 두 개)
동일 객체에서 일련의 작업을 수행 가능함.

print(items
	..add(6)
    ..remove(2)); //1, 3, 4, 5, 6


10.2. 컬렉션 if
조건에 의해 컬렉션의 값을 조정하거나 다르게 사용하고 싶을 때 사용함.
예를 들어, 리스트에서 특정 조건에서만 요소가 있었으면 좋겠다 싶을 때 [ [ 요소1,  if(조건) 요소, ... ] ] 의 형태로 사용가능함.

bool condition = true;
print([1, 2, 3, 4, if (condition) 5]); // true일 때만 6이 추가됨


10.3. 컬렉션 for
컬렉션 문법 안에서 for문을 사용가능함.
예를 들어, 만들고자 하는 리스트의 요소들이 순차적이라면 리스트 생성 시 for 문을 사용해 쉽게 만들 수 있음.

var listOfInts = [0, 1, 2, 3];
var listOfStrings = [
    for (var i in listOfInts) '#$i'
]; 
//#0, #1, #2, #3


10.4. null safety
+ 10.4.1.  ? (물음표)
해당 객체가 null 일 수도 있음을 알려주며 null일 때도 에러 없이 작동하도록 함.
주로 [ 타입 ? 변수명 ] 의 형태로 사용됨.
[ 객체명?.메서드 ] 의 형태로 사용되는 경우, 객체가 null인 경우 에러 대신 null을 반환함.
+ 10.4.2.  ! (느낌표)
해당 변수가 null 이 아니라는 것을 보장함.
+ 10.4.3.  ?? (if null)
[ 변수 ?? 값 ] 의 형태로 사용되어 변수가 null 일 때 ?? 뒤의 값으로 대체됨.

반응형

'Language > Dart' 카테고리의 다른 글

[Dart] 함수형 프로그래밍적인 특징  (0) 2023.04.01

댓글