티스토리 뷰
개요
scala의 변수는 우리가 흔히 생각하는 변수와 개념으로 사용하는 변수(var)와 변하지 않는 값을 의미하는 값(val)이 있다. 그중에서 scala는 값(val)사용을 지향하는 편이다.
값(이하 val)은 선언과 동시에 초기화 할 때만 값이 정해지며 이후에 수정하려고 하면 컴파일 에러를 발생시켜, 코딩 단계에서 버그 발생 확률을 낮출 수 있다는 장점이 있다. 개념만 봤을 때 C++의 const 변수와 같다고 할 수 있다.
다만 하나의 함수에서 너무 많은 변환이 필요하다면 메모리를 고려하여 변수(이하 var)를 사용할 수도 있다. 또한 구조상 억지로 val을 사용하려고 했을 때 코드가 오히려 더 복잡해지는 경우에 제한적으로 var를 사용할 수 있다.
어디까지나 val을 지향하고 var를 지양 할 뿐 강제적인 것은 아니기 때문에 프로그래머 재량에 따라 두가지를 혼용하면 된다.
// 두 용어를 모두 포함할 수 있는 새로운 단어가 없는 관계로 그냥 묶어서 변수라고 표현하겠다.
변수 선언
scala는 변수 선언 순서가 C++과는 반대이다. 따라서 기본적인 문법 형식은 다음과 같다.
[var/val] [이름] : [자료형] = [값]
val과 var로 각각 변수를 선언하고 초기화 했으며 각각 새로운 값을 대입. val에 새로운 값을 지정해주려고 할 때 컴파일 에러가 나는 것을 볼 수 있다.
val age: Int = 24 |
scala는 컴파일러가 자료형을 추론하여 컴파일 단계에서 정해주기 때문에 자료형을 생략해도 scala 컴파일러가 대입하는 값을 보고 자료형을 정해준다.
자료형을 지정하지 않고 바로 값을 대입. 대입하는 값에 따라 자료형을 추론해준다.
val age = 24 |
함수 파라미터
함수 파라미터에 들어가는 변수는 무조건 val이다. 따라서 함수 내에서 받아온 값을 변경할 수 없다. 이는 함수 내에서 파라미터로 받아온 값을 변경할 경우 함수 바깥에서도 그 값이 변경될 수 있기 때문에 포인터 개념이 없는 scala에서 순수함수를 만들기 위한 방법인것 처럼 보인다.
def func(a:Int, b:Int): Int = { |
마치며
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
- machine learing
- DesignPattern
- C++
- SwiftUI
- C/C++
- ue4
- 수학
- rxswift
- Java
- game
- SOCKET
- C
- ios
- 드라마
- 데이터베이스
- JSP
- winsock
- swift
- OS
- SHADER
- Cocos2d-x
- 자료구조
- Git
- database
- scala
- Spring
- 국내여행
- mongoDB
- 운영체제
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |