안녕하세요 오늘은 다트언어 데이터 타입에 대하여 공부를 해보겠습니다!
시작하기전에 다트언어는 자바스크립트를 겨냥해 만든 언어로 UI디자인을 위해 만들어진 언어라고 합니다! 그냥 그렇다구 해서 써봐요 ㅎㅎ
아무튼 시작해볼게요!
다트의 타입 클래스
다트에서 모든 변수는 객체로 처리한다고 합니다! 따라서 우리가 아는 기본적인 정수형, 문자형, 불리언형 등 모든 것을 객체로 표현하고 있어요.
- 객체란? : 객체는 현실세계에 존재하는 모든 것들이 객체가 될 수 있어요! 보통 붕어빵을 이야기 많이 하는데, 붕어빵1, 붕어빵2, 붕어빵3 이런식으로 객체라구 말하구, 그 붕어빵의 틀을 클래스라고 표현해요. 그러니까 위에서 이야기 한 것처럼 (정수형 틀 = 정수형 클래스), (정수형 객체 = 정수형1)이 되는 거죠!
다트언어는 아래 표처럼 자료형 클래스를 제공해 줍니다!
라이브러리 | 타입 클래스 | 데이터 |
---|---|---|
dart:core library | bool | true, false |
double | 실수 | |
int | 정수 | |
num | 숫자(double과 int의 상위클래스) | |
String | 문자열 | |
dart:typed_data | ByteData | 바이트 |
아래 그림을 보시면 bool 자료형이 클래스로 되어 있는 것을 보실 수 있습니다!
자 그럼 실습을 해볼게요.
문자열 사용해보기
- 문자열을 다음과 같이 3가지 방식으로 표현 할 수 있어요!
String data1 = 'hello';
String data3 = '''
hello
world
''';
String data4 = """
hello
world
""";
- 실행결과
- 변수랑 같이 편리하게 쓰려면? 다음과 같은 방식을 사용할 수 있습니다!
int number = 10;
String name = 'Minseo';
print('name: ${name}, number: ${number}');
- 실행 결과
다음으로는 형 변환하는 방법에 대해 알아볼게요!
형 변환하기!
형 변환이란 정수형에서 문자형, 정수형에서 실수형으로 데이터 형식을 변환해 주는 것을 의미해요. 다트에서는 어떻게 변환 해줄지 실습해보겠습니다.
int int1 = 10;
double double1 = 20;
double double2 = int1.toDouble();
int int2 = double1.toInt();
int num = 10;
String num1 = '10';
String num2 = num.toString();
int num3 = int.parse(num1);
- 정수형으로 실수형으로 바꾸고 싶다? -> toDouble()!
- 실수형을 정수형으로 바꾸고 싶다? -> toInt()!
- 정수형을 문자형으로 바꾸고 싶다? -> toString()!
- 문자형을 정수형으로 바꾸고 싶다? -> int.parse()!
위와 같이 여러가지 형태로 변환을 해줄 수 있습니다! 한번 실습해보세요!
상수 변수 - const, final 사용해보기!
상수 변수란?
- 한 번에 알 수 있는 것 중 하나가 3.14(파이)에요! , 한 번 지정하면 변하지 않는 수를 의미해요! 다트에서는 상수 지정을 어떻게 해주는지 알아볼게요
const - 컴파일 할 때 지정!
- 컴파일이란? : 우리가 보통 코딩을 한다고 하면 영문으로 가득찬 파일을 작성을 하는데, 이 때 이 파일을 실행 가능하게 해주는 것이 컴파일러(실행기)라는 놈이 우리 파일을 컴퓨터가 이해할 수 있게 바꿔줘요. 그러면 이 컴파일러가 하는 것이 파일을 컴파일 하는 것인데 이 때 const로 지정해준 변수에 값을 넣어준다는 의미에요.
const는 컴파일 시 변수에 값을 할당해줘요!, 그니까 프로그램이 돌아가고 있을 때 해당 변수의 값을 변경해주려고 하면, 오류가 발생합니다!, 아 그리고 반드시 코딩할 때 해당 변수에는 미리 값을 넣어줘야겟죠?
final - 런타임 시 지정!
- 런타임이란? : const할 때 컴파일의 의미를 아셨을거에요! 그렇다면 런타임은 뭘까요? 컴파일 후에 말 그대로 프로그램이 작동 중 일때 (런타임일 때) 변수에 값을 대입해 주는 것을 말해요!
final은 런타임 중 변수에 값을 할당해줘요!, 프로그램이 돌아가는 중에 변수에 값을 설정해주고, 고정해줍니다!
유용한 타입형 var과 dynamic 타입!
해당 데이터 타입들은 특정 데이터 타입을 지정해주는 것이 아니고, 변수에 값을 설정해주면 다트에서 알아서 데이터 타입을 처리해줘요! 정말 고마운 녀석들이죠 흐흐
var 타입형?
- var 타입형은 컴파일러가 변수에 들어가 있는 값을 보고 타입형을 유추해서 알아서 설정해줘요! 예를 들어 아래 코드를 보시죠!
var number = 10;
number = 'Minseo';
우리는 코드를 보고 number가 int형이구나! 알겠죠? 마찬가지로 컴파일러도 값(10)을 보고 아~ int형이구나 하고 var을 int로 사용합니다! 그래서 number에 문자열을 할당하게 된다면 당연히 오류가 나겠죠?
dynamic 타입형?
- dynamic 데이터 타입은 모든 데이터 타입을 대입할 수 있어요 엄청 고마운 녀석이죠!
- 여기서는 변수 값에 정수, 실수, 문자열을 대입하든 무엇을 대입해도 좋아요! 단, 우리가 해당 변수가 어떤 타입으로 쓰이고 있는지 바로 알 수 없겠죠? 장점이 있는만큼 단점도 있으니 주의해서 써야해요!
컬렉션! -List, Set, Map
컬렉션이란? 흔히 우리가 알고 있는 배열을 말해요! 다트에서는 배열을 어떻게 사용하고 있는지 알아볼게요!
리스트 = 배열 []
다트에서는 리스트를 배열이라고 해도 상관없다고 합니다! 그럼 바로 코드로 알아볼까요?
List list = ['0', 'minseo'];
list[0] = 10;
print(list);
- 실행 결과
실행 결과를 보시면 아시겠지만 리스트 속에 정수형과 문자열이 동시에 들어가 있어요! 정말 편하겠죠? 물론 특정 데이터 타입으로 리스트를 제한해 줄 수도있습니다!
List<int> list = [0, 1, 2];
위 코드 처럼 제네릭 으로 제한을 걸어주면 데이터 타입을 제한시킨거에요!
추가적으로 우리는 generate() 함수를 통해서 리스트를 초기화 해줄 수 있어요!
var list = List<int>.generate(3, (index) => index*10, growable: true);
위 코드같은 식으로 말이죠! 잘 이용해 먹어요!
집합 = 중복을 허용하지 않는 리스트! {}
집합은 데이터의 값에 중복된 값을 허용하지 않아요!
맵 = 키와 값의 형태로 데이터를 저장하는 리스트! { key: value }
맵은 데이터를 키와 값의 형태로 저장을 한답니다!
널 포인트 관리하기!
다트는 널값을 관리하기 위해 다양한 문자를 사용합니다! 왜 널값을 관리해주냐면, 객체에 널값이 들어간 상태가 있다고 하면, 프로그램 동작 중에 치명적인 오류를 발생시킬 수 있기 때문이에요! 그래서 어떤 객체가 널값이 허용되어 있는지?, 허용이 되었다면, 해당 객체에 대해서 널값을 검사해주고, 만약 널이 지정되었다면 어떤 값을 객체에 할당할 것인지를 설정해 줄 수 있습니다! 그럼 하나씩 천천히 알아보겠습니다!
객체에 널 허용해주기
int? a = 10;
a = null;
위 코드 처럼 타입형 뒤에 "?" 문자를 써주면 해당 변수에는 널값이 들어 갈 수 있음을 의미해요!
널 허용 객체에 대해 검사해주기
널값을 허용했다면 이 객체에 널값이 들어가지 않게 최대한 노력하는게 중요해요. 위에서도 말했지만, 널값이 들어가면 프로그램 구동 중 치명적인 문제를 일으킬 수 있기 때문이에요. 코드를 볼게요
int? a = 10;
a!;
위 코드에서 보시면 a 뒤에 "!" 문자가 있는 것을 보실 수 있어요! "!" 느낌표가 바로 널 값인지 아닌지 검사해주는 도구에요! 만약 해당 값에 널값이 들어 있다면 오류가 납니다!
맴버에 접근 시 ! ?., ?[]
맴버 변수와, 리스트의 값에 접근 할 때도 널 값인지 아닌지 검사하는게 필요하겠죠? 그것이 바로 ? 와 ? [] 입니다. 코드를 보시죠!
List<int>? list = [10, 20];
print('list[0] : %{list?[0])';
위 코드에서 보시면 리스트의 값에 접근할 때 해당 리스트가 널값이 아닐때만 접근하게 도와줘요 만약 널값이면 오류가 납니다!
값을 대입할 때
값을 대입할 때도 널값을 대입하는지 아닌지 검사하는게 필요하겠죠? 코드를 바로 볼게요!
int? num;
num?? = 10;
num?? = null;
위와 같이 ?? 도구는 대입하려는 값이 널값이라면 값을 대입하지 않아요! 그래서 num에 들어 있는 값은 최종적으로 10이 되는거죠! 그렇다면 널값을 대입할 때 값을 대테할 수 도 있겠죠?
int? num;
num?? = 10;
int? num2;
num2 = num ?? 20;
위 코드 처럼 num이 널값이라면 20이라는 값을 대신 대입해줍니다!!
여기까지 보시느라 고생하셨어요. 오늘은 다트의 데이터 타입과 데이터 타입을 어떻게 관리해주는지 알아보았어요! 그럼 오늘 알아본 내용을 정리해 볼게요!
- 다트의 타입 클래스!
- 다트의 타입 변환!
- 다트에서 상수변수! - const, final
- 다트에서 컬렉션! List, Map, Set
- 다트에서 널 값을 관리하는 방법
다음 시간에는 다트에서 함수가 어떻게 쓰이는지? 제어문은 어떻게 쓰이는지 알아볼게요!
긴 글 읽어주셔서 감사합니다!
'프레임워크 > 다트언어' 카테고리의 다른 글
클래스와 생성자는 어떻게 사용할까? (1) | 2023.11.14 |
---|---|
다트 언어 - 함수와 연산자, 제어문에 대하여! (0) | 2023.11.09 |