본문 바로가기
프로그래밍 언어/Dart

Dart 변수 완벽 가이드 - 변수 선언부터 null 안전성까지

by 희품 2026. 1. 1.
반응형

Dart 프로그래밍 2. 기본문법 1) 변수 선언과 null 안전성

"내 나이는 몇 살이지?"라고 생각할 때, 우리는 머릿속에 숫자를 저장하고 꺼내 쓸 수 있다.
컴퓨터도 마찬가지다. 어떤 정보를 기억하고 활용하려면, 어딘가에 그 값을 저장해 둘 공간이 필요하다. 이때 등장하는 개념이 바로 변수(variable)다.

프로그래밍의 거의 모든 것은 변수에서 시작된다고 해도 과언이 아니다.
Dart를 포함한 프로그래밍 언어를 배우기 시작했다면, 변수 개념을 정확히 이해하고 사용하는 것이 무엇보다 중요하다.

Dart 언어의 변수(Variables)는 데이터를 저장하고 관리하는 핵심 개념으로, 다양한 타입과 선언 방식을 통해 유연하고 안전한 코드를 작성할 수 있다.

Dart에서 변수가 어떻게 선언되고, 어떤 특징을 갖는지, 그리고 null 안전성과 상수 선언 같은 실용적인 내용까지 살펴보자.

 

변수(Variables)란?

변수(Varialbes)는 수학적인 의미와 단어적인 의미로, 어떤 관계나 범위 안에서 변할 수 있는 수를 의미한다.

프로그래밍에서 변수는 데이터를 저장할 수 있는 이름이 붙은 공간으로 이해하면 된다.

숫자, 문자, 논리값 등 다양한 데이터를 변수에 담아두고, 필요할 때 값을 읽거나 수정할 수 있다.

변수를 사용하면 반복되는 값이나 동적으로 변하는 정보를 효율적으로 처리할 수 있으며, 코드의 재사용성과 가독성*도 높아진다.

 

코드 한 줄을 예를 들어보자.

int age = 30;

여기서 age는 변수 이름이고, 30은 그 안에 저장된 값이다. 이 변수를 통해 프로그램에서 나이 정보를 필요할 때마다 참조하거나 변경할 수 있다.


* 가독성 : 코드가 얼마나 쉽게 읽히는가를 나타내는 지표

 

변수 선언과 초기화

명시적 타입 선언

변수의 타입을 명확하게 지정하여 선언하는 방식이다.

String name = 'Alice';
int age = 30;

타입 추론 (Type Inference)

var 키워드를 사용하면 초기화된 값에 따라 Dart가 변수의 타입을 자동으로 추론*한다.

var city = 'Seoul'; // String으로 추론
var year = 2025;    // int로 추론

단, var로 선언된 변수는 초기화 후 다른 타입의 값을 할당할 수 없다.

var name = 'Bob';
name = 42; // 오류: int 값을 String 타입 변수에 할당할 수 없음

동적 타입 (Dynamic Type)

dynamic 키워드를 사용하면 변수에 어떤 타입의 값이든 할당할 수 있으며, 타입 변경도 가능하다.

dynamic variable = 'Hello';
variable = 100; // 가능

그러나 dynamic은 타입 안정성을 보장하지 않으므로, 가능한 경우 명시적 타입 선언이나 var를 사용하는 것이 권장된다.

또한, dart 공식 가이드 스타일에 따르면, String, int 같은 명시적 타입 선언보다 var 키워드를 사용하는 타입 추론 방식 사용을 권하고 있다.


추론(inference) : 이미 알고 있는 또는 확인된 정보로부터 논리적 결론을 도출하는 행위 또는 과정.

 

널 안전성 (Null Safety)

Dart는 Null* 안전성을 지원하여, 변수에 null이 할당되어 발생할 수 있는 오류를 컴파일 타임에 방지한다.

예를 들어 int 변수 i의 절댓값을 구할 때, inull이면 i.abs() 호출은 널 참조 오류를 발생시킬 것이다.

Dart는 프로그램이 비정상 동작하지 않도록 이러한 문제를 사전에 차단하고 안전하게 지켜준다.

 

그런데, 어떤 변수는 null이 들어갈 필요가 있는 경우도 있다. 이 변수에는 데이터가 없다는 내용이 필요한 경우다.

그럴 때는 ? 키워드를 사용하면, 변수에 대해 null 허용 여부를 명시할 수 있다.

String? name; // Nullable Type, null 허용
String name;  // Non-nullable Type, null 불허

null을 허용하지 않는 변수는 초기화 없이 사용할 수 없다. 

null일 가능성이 있는 객체(변수)의 표현식이나 메서드 호출, 속성 호출은 허용되지 않는 방식으로, Dart는 널 안전성(Null safety)을 제공한다.


Null : 값이 없거나 아무것도 아니라는 의미. Null Safety가 없다면, 아무것도 없는 값을 제어하거나 참조하려고 할 때, 심각한 오류가 발생하게 된다.

 

변수의 기본 값(Default Value)

 

null 허용 타입의 변수는 초기화하지 않는다면, 기본 값은 null 값이 된다. 숫자 타입 또한 null 허용 시, 기본 값은 null이다.

int? line;
assert(line == null); // line != null 이면 오류 발생

앞에서 언급한 대로, null 비허용 변수는 반드시 초기화를 해야 한다. 그 시점이 지역 변수는 선언 후 나중에 값을 할당해도 되지만, 사용 전에는 반드시 할당되어야 한다.

null 허용 문자의 사용 전 초기화 관련 dart 프로그램.


dart를 포함한 비교적 최근에 나온 프로그래밍 언어들의 변수는 대부분 자동으로 초기화된다.

하지만, null을 허용하지 않을 때, 초기화하지 않으면 문제가 발생하거나, 혹은 컴파일 오류가 발생해 불필요한 유지보수 시간을 허비하는 경우가 생길 수 있다. 따라서, 초기화 값을 사용하지 않는 변수가 있더라도, 숫자라면 0을, 문자라면 빈 문자열 등으로 초기화하는 습관을 들이면 안전한 코딩 스타일을 만드는 데 도움이 될 것이다.

여러분의 의견이나 궁금증이 큰 도움이 됩니다. 댓글로 자유롭게 이야기해 주세요.

 

반응형