[Scala] 데이터 및 변수 타입
안녕하세요 Dibrary입니다.
scala를 본격적으로 사용하면서 java랑 비슷하지만 약간의 차이가 있는데, 이 내용을 자주 까먹곤 합니다.
그래서 scala 언어를 다룰 때 꼭 기억해 둬야 하는 기본적인 변수 타입 관련 내용을 정리해 보겠습니다.
먼저 cmd로 scala REPL 창을 열어줍니다.
이제 간단한 입력들을 통해 scala 언어 문법을 확인해 보겠습니다.
1. 값 정의
scala의 값은 val [이름] : [타입] = 리터럴 로 정의됩니다.
정석은 위 문법 꼴로 입력하는 것이지만, 제가 아래에서 생성한 y변수 처럼 : [타입] 을 넣지 않더라도 자동으로 타입을 맞춰 줍니다.
소수점을 넣어보니 Double 꼴로 맞춰준 것을 보실 수 있습니다.
근데, 정석대로 입력하려 하는데 자료형이 안 맞으면 에러를 볼 수 있습니다.
이렇게 말이죠. type mismatch;
값객체 안의 값은 바꿀 수 없습니다. 바꾸려면 아래와 같이 val을 반드시 써 줘서 새롭게 정의해야 하죠.
똑같은 x라는 값객체를 다르게 정의하려고 매번 앞에 val이 써진 것을 볼 수 있습니다.
2. 변수 정의
var로 변수를 정의할 수도 있습니다. 다만, 이 경우에는 자동으로 자료형이 변경되지 않습니다.
변수 객체는 같은 자료형에 한해 값을 마음대로 변경할 수 있습니다.
x라는 변수를 5에서 곧바로 23으로 변경한 걸 보실 수 있습니다.
값객체 및 변수객체의 이름은 관례상 소문자로 시작합니다.
3. 타입 종류
scala도 다른 언어와 마찬가지로 데이터 타입이 구분되어 있습니다.
타입 | 설명 | 크기 |
Byte | 부호 있는 정수 | 1바이트 |
Short | 부호 있는 정수 | 2바이트 |
Int | 부호 있는 정수 | 4바이트 |
Long | 부호 있는 정수 | 8바이트 |
Float | 부호 있는 부동 소수점 | 4바이트 |
Double | 부호 있는 부동 소수점 | 8바이트 |
모두 다 외울 필요는 없으나, 한 가지만 기억 하시면 됩니다.
scala는 타입 순위에 기반해, 한 타입의 숫자를 자동으로 다른 타입으로 변환 해 줄 수 있다.
이게 무슨말인고 하니,
Byte로 정의한 b를 상위 타입인 Long으로 변경하니? 정상적으로 됩니다.
Long은 Double로 변경하니? 정상적으로 됩니다. (물론, 정수에서 실수로 변경한다고 경고를 하긴 하지만 여기서는 상관 없습니다.)
4. 문자열
당연히 문자도 쓸 수 있습니다. 사칙연산도 가능합니다.
+로 두 개의 문자열을 더해서 하나의 값객체에 담은 것을 보실 수 있습니다.
출력 할 때는 s 를 문자열 맨 앞에 붙이고, ${ } 이렇게 객체를 곧바로 담아서 출력할 수 있습니다.
Char는 작은 따옴표를 써서 만들어지고, String은 큰 따옴표를 써서 만들어집니다.
뭐가 다르냐구요? 비교를 해 보면 다르다고 취급합니다.
이 외에 기억해 둬야 하는 내용은 아래와 같습니다.
scala는 null이 아닌 문자열을 true로 평가하지 않는다.
숫자 0과 false는 다르다.
5. Unit 타입
Unit 타입은 아무 것도 반환하지 않거나 값이 없음을 나타냅니다.
말 그대로 비어있는 것을 의미하므로, 0을 넣으려고 해도 안 됩니다.
6. 튜플
여러 값을 가진 컨테이너를 튜플이라고 합니다.
하나의 객체에 여러 값을 담을 수 있으니 꽤 유용하죠.
튜플 안에 여러 자료형을 넣을 수 있고, 튜플 안에 또 튜플이 들어갈 수도 있습니다.
튜플 항목은 index를 이용해서 접근을 할 수 있고, 이 index의 시작은 1입니다. (이게 중요합니다.)
다른 언어에서는 항상 0이 시작 index였는데, scala는 그렇지 않습니다.
그리고 index로 값을 가져오는 것도 독특합니다.
파이썬이라면 객체[index] 이렇게 가져옵니다.
스칼라는 객체._index 이렇게 가져옵니다.
튜플안에 있는 튜플 역시 index를 2번 사용하면 가져올 수 있습니다.