-
Dart #1. Hello World프론트/Dart 2024. 10. 27. 19:24
Hello world
예시 코드:
void main() { print('hello world'); }
결론
- 모든 Dart 프로그램은 main 함수에서 시작한다.
- 명령문 끝에는 세미콜론을 붙여야 하지만, 경우에 따라 Dart가 생략을 허용하기도 한다.
Variadbles
예시 코드:
void main() { var name = 'Alice'; // 타입 추론: String int age = 25; // 명시적으로 타입 지정 print('$name, $age'); } class Person { String name; // 타입 명시 int age; // 타입 명시 Person(this.name, this.age); }
결론
- Dart는 변수의 타입을 자동으로 추론하지만, 선언 후 초기화 시 타입 일관성을 지켜야 한다.
- 함수나 메서드 내부의 지역 변수는 var를 사용하여 선언하는 것이 일반적이다.
- 클래스의 속성이나 전역 변수 선언 시에는 타입을 명시하는 것이 관습이다.
Dynamic
예시코드:
void main() { dynamic name; // 타입이 고정되지 않은 동적 변수 if (name is String) { // 이 블록 안에서는 name이 String 타입임을 Dart가 인지 print('name은 String 타입입니다.'); } if (name is int) { // 이 블록 안에서는 name이 int 타입임을 Dart가 인지 print('name은 int 타입입니다.'); } }
- dynamic 타입은 모든 타입의 값을 담을 수 있으며, 초기화되지 않으면 타입이 고정되지 않는다.
- is 연산자를 사용하면 타입을 검사할 수 있으며, 해당 블록 내에서는 해당 타입이 보장된다.
- 이렇게 타입을 조건에 따라 구분하면 런타임 시 다양한 타입에 맞는 로직을 처리할 수 있다.
- 꼭 필요한 때에만 사용하자
Null
예시코드:
void main() { String? name = 'jeongwon'; // name이 null일 수도 있고, String일 수도 있음. name = null; // name.length; // 컴파일 전에 IDE가 null 예외 가능성을 경고함. if (name != null) { print(name.length); // null 체크를 통해 경고가 사라짐. } // null 체크를 매번 피하고 싶을 때 ? 연산자를 사용. print(name?.isNotEmpty); // name이 null이면 아무것도 실행되지 않음. }
- String?과 같은 nullable 타입은 null과 특정 타입의 값을 모두 가질 수 있다.
- IDE는 null 예외 가능성을 사전에 경고하여 NullPointerException을 방지한다.
- if문을 사용해 null 체크 후 접근하면 경고가 사라진다.
- ?. 연산자를 사용하면 변수가 null인지 확인 후 안전하게 메서드를 호출할 수 있다. 만약 변수가 null이라면 메서드는 실행되지 않는다.
Final
예시코드:
void main() { final name = 'jeongwon'; // final: 한 번 초기화 후 값 변경 불가 name = 'jeongjae'; // 컴파일 에러: final 변수는 값을 변경할 수 없음 }
- final 키워드를 사용하면 변수를 한 번만 초기화할 수 있다.
- 초기화 이후에는 값을 변경할 수 없으며, 다시 할당하려고 시도하면 컴파일 에러가 발생한다.
- final은 변경되지 않아야 하는 값(예: 상수)이나 초기화 후 고정되어야 하는 데이터를 선언할 때 유용하다.
Late
예시코드:
void main() { late final String name; // 초기값 없이 선언 가능 // print(name); // 이 시점에서 사용하면 런타임 에러 발생 name = 'jeongwon'; // 나중에 초기화 print(name); // 정상 출력: jeongwon }
- late 키워드는 변수를 나중에 초기화할 것을 보장할 때 사용한다.
- 초기값 없이 선언이 가능하며, 주로 API 요청 완료 후나 비동기 작업 이후 값을 할당할 때 유용하다.
- late final을 사용하면 최초 초기화 후 값을 변경할 수 없도록 보장한다.
- 초기화 전에 사용하면 런타임 에러가 발생하니 주의가 필요하다.
Const
예시코드:
void main() { // const API = fetchAPi(); // 컴파일 타임에 값을 알 수 없으므로 오류 발생 const max_allowed_price = 120; // 컴파일 타임 상수 print('최대 허용 가격: $max_allowed_price'); }
- const 키워드는 컴파일 타임에 결정되는 상수를 선언할 때 사용한다.
- API 요청과 같은 런타임 작업은 const로 선언할 수 없다.
- const는 불변의 값을 보장하며, 주로 숫자나 문자열 같은 변경되지 않는 값을 선언할 때 유용하다.
'프론트 > Dart' 카테고리의 다른 글
Dart#3. 함수 (3) 2024.11.03 Dart#2. 자료형 (0) 2024.10.29 Dart #0. 시작 (1) 2024.10.25