프로그래밍/Scala

[Scala] 데이터 및 변수 타입

Dibrary 2022. 5. 12. 09:50
반응형

안녕하세요 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번 사용하면 가져올 수 있습니다.

 

728x90
반응형