티스토리 뷰

개요


scala의 변수는 우리가 흔히 생각하는 변수와 개념으로 사용하는 변수(var)와 변하지 않는 값을 의미하는 값(val)이 있다. 그중에서 scala는 값(val)사용을 지향하는 편이다.

값(이하 val)은 선언과 동시에 초기화 할 때만 값이 정해지며 이후에 수정하려고 하면 컴파일 에러를 발생시켜, 코딩 단계에서 버그 발생 확률을 낮출 수 있다는 장점이 있다. 개념만 봤을 때 C++의 const 변수와 같다고 할 수 있다.


다만 하나의 함수에서 너무 많은 변환이 필요하다면 메모리를 고려하여 변수(이하 var)를 사용할 수도 있다. 또한 구조상 억지로 val을 사용하려고 했을 때 코드가 오히려 더 복잡해지는 경우에 제한적으로 var를 사용할 수 있다.


어디까지나 val을 지향하고 var를 지양 할 뿐 강제적인 것은 아니기 때문에 프로그래머 재량에 따라 두가지를 혼용하면 된다.



// 두 용어를 모두 포함할 수 있는 새로운 단어가 없는 관계로 그냥 묶어서 변수라고 표현하겠다.






변수 선언


scala는 변수 선언 순서가 C++과는 반대이다. 따라서 기본적인 문법 형식은 다음과 같다.


[var/val] [이름] : [자료형] = [값]


val과 var로 각각 변수를 선언하고 초기화 했으며 각각 새로운 값을 대입. val에 새로운 값을 지정해주려고 할 때 컴파일 에러가 나는 것을 볼 수 있다.


val age: Int = 24
   // age: Int = 24

age = 25
   // compile error

var height: Int = 180
   // height: Int = 180

height = 178
   // height: Int = 178


scala는 컴파일러가 자료형을 추론하여 컴파일 단계에서 정해주기 때문에 자료형을 생략해도 scala 컴파일러가 대입하는 값을 보고 자료형을 정해준다.


자료형을 지정하지 않고 바로 값을 대입. 대입하는 값에 따라 자료형을 추론해준다.


val age = 24
   // age: Int = 24
val name = "james"
   // name: String = "james"






함수 파라미터


함수 파라미터에 들어가는 변수는 무조건 val이다. 따라서 함수 내에서 받아온 값을 변경할 수 없다. 이는 함수 내에서 파라미터로 받아온 값을 변경할 경우 함수 바깥에서도 그 값이 변경될 수 있기 때문에 포인터 개념이 없는 scala에서 순수함수를 만들기 위한 방법인것 처럼 보인다.


def func(a:Int, b:Int): Int = {
   a = a + b
       // compile error
   a
}






마치며


scala의 자료형 추론은 잘 사용하면 굉장히 추상적인 코드를 작성할 수있다. 실행만 된다면 잘 정의한 변수 이름, 함수 이름을 통해 쉽게 어떤 행동을 하는 코드인지 파악할 수 있을 것 같다.

하지만 이 방법이 결국 내부적인 동작을 읽기 위한 가독성을 향상시켜주는지는 더 공부해봐야 알 수 있을 것 같다.



'Programming > Language' 카테고리의 다른 글

C# Tutorial | 기본 문법  (0) 2018.10.29
Python Tutorial | 기본 문법  (0) 2018.09.17
스칼라(scala) - 패턴 매칭(match)  (0) 2017.09.13
스칼라(scala) - 함수  (0) 2017.09.12
스칼라(scala) - List  (0) 2017.09.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함