ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.