1. 변수와 null safety ?문법

강재영's avatar
Sep 26, 2024
1. 변수와 null safety ?문법
 

클래스 밖에서 선언가능

// static > heap > stack class Animal { //static int id = 1; static String name = "동물"; void speak() { //메서드 (상태 변경할때) } } void hello() { //static // 메서드가 아니라 함수다. (기능을 가지는 친구) int num = 10; //스택 } String name = "Hello World"; //static에 뜬다. void main() { print(name); print(Animal.name); Animal a = Animal(); print(a.id); hello(); }
Animal 클래스, hello, static String name, name, main 모두 선언가능
자바에서는 무조건 클래스 안에다 설정해야되지만
 
Dart에서는 변수, 함수, 클래스 등을 클래스 밖에서 전역적으로 정의할 수 있습니다. 이는 Dart의 유연한 구조 덕분입니다. 즉, 꼭 클래스 안에 정의하지 않아도 함수나 변수를 전역에서 선언하고 사용할 수 있다.

Dart에서의 변수 타입

void main() { int n1 = 1; double d1 = 10.1; bool b1 = true; String s1 = "홍길동"; // print() 함수는 Console에 출력을 해주는 함수입니다. // ${} 를 활용하면 문자열에 변수를 바인딩할 수 있습니다. print("정수 : ${n1.runtimeType}"); //1급객체 print("실수 : ${d1.runtimeType}"); print("부울 : ${b1.runtimeType}"); print("문자열 : ${s1.runtimeType}"); }
Dart에서는 모든 데이터가 **객체(1급 객체)**로 동작합니다. 심지어 기본적인 데이터 타입(정수, 실수, 부울 값 등)조차도 객체로 취급됩니다. 이것은 자바와 Dart의 큰 차이점 중 하나입니다.
  1. int: n1은 정수형 값을 가지는 객체입니다. Dart에서 int는 객체로 취급되며, 객체이기 때문에 runtimeType 메서드를 호출하여 타입 정보를 얻을 수 있습니다.
  1. double: d1은 실수형 값을 가지는 객체입니다. Dart에서는 모든 숫자 타입도 객체로 처리되며, 객체의 메서드와 속성을 사용할 수 있습니다.
  1. bool: b1은 참/거짓을 표현하는 부울 값으로, 이 역시 객체로 동작합니다.
  1. String: s1은 문자열 값을 가지는 객체입니다. 문자열도 다른 타입처럼 객체로 취급됩니다.

Dart의 runtimeType:

Dart에서 runtimeType객체의 실제 타입을 런타임 중에 반환해주는 속성입니다. 모든 변수는 객체이기 때문에 runtimeType을 호출하여 해당 변수의 타입 정보를 알 수 있습니다.
 

dynamic 타입

dynamic 타입은 모든 타입을 받을 수 있고 다른 타입으로 변경도 가능하다.
void main() { //자바의 오브젝트타입 다운캐스팅해서 사용가능 dynamic n1 = 1; print("정수 : ${n1.runtimeType}"); n1 = 10.5; print("n1 : ${n1.runtimeType}"); }
 

null safety(널 안전성)

변수가 null 값을 가질 수 있는지 여부를 명시적으로 구분하도록 했습니다. 기본적으로, Dart에서 변수는 null을 허용하지 않으며, 변수가 null 값을 가질 수 있도록 하려면 **nullable 타입(String?)**으로 명시해줘야
class A { late int num; } //String username = null; 안됨 String? username = null; //새로운 타입 null을 받을 수 있음 //전역 정적 메모리 (static) void main() { print(username); print(username ?? "임시아이디"); print(username == null ? "임시아이디" : username); }
 

late 키워드와 null

  • late 키워드는 변수를 나중에 초기화할 때 사용됩니다. late 변수를 사용할 때는, 초기화 전에 변수에 접근하면 런타임 에러가 발생합니다. 하지만 late 변수는 반드시 null이 아닌 값을 할당해야 하며, null을 허용하지 않습니다.
    • class A { late int num; // 나중에 초기화할 변수 }
      여기서 late int num;는 나중에 초기화되지만, null을 허용하지 않는다는 점이 중요합니다. 초기화 전에 접근하면 런타임 에러가 발생할 수 있습니다.
 
Share article

강재영 블로그