데이터로 작업하기 : 리터럴, 값, 변수, 타입
리터럴
숫자, 문자, 텍스트 처럼 소스코드에 바로 등장하는 데이터
값
불변의 타입을 갖는 저장 단위.
값은 정의 될때 데이터가 할당 될 수 있지만, 절대 재할당 될수는 없음.
변수
가변의 타입을 갖는 저장 단위. 변수는 정의시 데이터를 할당 할 수 있으며, 언제라도 데이터를 재할당 할 수 있음.
타입
작업하는 데이터의 종류, 데이터의 정의 또는 분류를 의미.
스칼라의 모든 데이터는 특정 타입에 대응, 모든 스칼라 타입은 그 데이터를 처리하는 메소드를 갖는 클래스로 정의.
데이터 관련 메모리 할당
스칼라에서 값과 변수에 저장된 데이터를 더 이상 사용하지 않으면, 자바 가상 머신의 가비지 콜렉션(garbage collection)이 자동으로 할당을 취소함.
사용자가 직접 할당 취소할 필요도, 그럴 수도 없음.
값
스칼라의 값 정의 구문
Val <이름> : <타입> = <리터럴>로 정의 됨.
Ex)val x : Int = 5 (int 형태의 5의 값을 x에 할당함.)
불변의, 타입을 갖는 스토리지 단위.
관례적으로 데이터를 저장하는 기본적인 방법.
값은 이름과 할당된 데이터 모두 필요하지만, 명시적인 타입이 있어야 하는것은 아님.
타입이 지정되지 않았다면, 컴파일러는 할당된 데이터를 기반으로 타입을 추론.
타입 추론(type Inference)
스칼라 컴파일러는 할당된 값을 보고 그 값의 타입을 알아차림.
주의 사항 : 코드의 가독성을 떨어뜨리지 않는 범위에서 사용 해야 함. (누군가가 작성한 코드를 보고 값의 타입을 알아 볼 수 없다면, 값 정의에 명시적 타입을 포함하는 것이 더 나음.)
변수
구문 : 값 정의
Var <식별자> [:<타입>] = <데이터>
스칼라에서는 관례상 변수보다 값을 선호함
이는 값을 사용하면 소스 코드가 안정적이며 예측 할 수 있기 때문임.
값을 정의하면, 다른 어떤 코드에서 접근하더라도 같은 값을 유지함.
코드 시작 부분에 값을 할당하면 마지막 까지 값이 변경 되지 않기에 디버깅하는 일이 더 쉬움.
값을 정의 할때와 마찬가지로, 변수도 명시적 타입 없이 정의 할 수 있음.
만일, 타입이 지정되지 않았다면, 스칼라 컴파일러는 변수에 할당할 올바른 타입을 결정하기 위해 타입 추론을 사용함.
그러나 값과 달리, 변수는 아무 때나 새로운 데이터를 재할당 할 수 있음.
명명
특징
스칼라 이름에는 문자, 숫자, 그리고 다양한 특수 연산자(operator) 기호를 사용할 수 있음.
좀 더 표현력 있는 코드를 작성할 수 있도록 더 긴 이름 대신 표준 수학 연산자와 상수를 사용할 수 있음.
명명 규칙
하나의 문자 다음에는 아무것도 없거나, 하나 이상의 문자 또는 숫자가 뒤따라 온다.
하나의 문자 뒤에는 아무것도 없거나 하나 이상의 문자와 숫자가 뒤따르며, 그 뒤에는 언더스코더(_)를 덧붙일 수 있고, 그 다음에 하나 이상의 문자와 숫자 또는 연산 기호가 뒤 따른다.
하나 또는 그 이상의 연산자 기호
하나 또는 그 이상의 문자를 한쌍의 역인용부호(backquote, `)로 둘러싼다.
타입
숫자형 데이터 타입
byte
short
int
long
float
double
숫자 리터럴
int
접두사, 접미사가 없는 정수, 16진수
5
0x0f
long
접미사 'l' 사용
5l
double
소숫점 or 접미사 'd' 사용
5.0
5d
float
접미사 'f' 사용
5f
문자열
여러줄 리터럴(Multiline literal)
보간 (interpolation)
Float 값의 앞뒤로 텍스트를 추가하여 만든 String을 보여줌.
값 또는 변수를 String 내에 결합시키기 보다 직접적인 방식은 외부 값과 변수명을 인식하고 해석하는 특수 모드인 문자열 보간(string interpolation)을 사용.
문자열의 첫 큰 따옴표 전에 접두사 ‘’s’를 추가하여 표기.
그 다음, 달러 기호($)( 선택적으로 중괄호와 함께 쓰기도 함.) 외부 데이터에 대한 참조 임을 표시.
Ex)
Val approx = 335/113f
println(“PI, using 335/113, is about “ + approx + “.“)
문자열 보간법 적용
println(s”PI , using 335/113 , is about $approx.”)
정규 표현식
검색 패턴을 나타내는 문자와 구두점으로 이루어진 문자열
정규 표현식 구문
val <정규표현식 값> (<식별자>) = <입력 문자열>
스칼라 타입 계층 구조
Any ( 절대루트 : 모든 타입 )
AnyVal
값으로 이루어진 타입 ( Heap 메모리 할당 )
AnyRef
메모리 참조를 통해 접근 되는 타입
튜플
둘 이상의 값을 가지는 순서가 있는 컨테이너 (각각의 값은 서로 다른 타입을 가질 수 있음.)
유의 사항
리스트와 배열과는 달리 튜플의 요소들을 반복할 수 없음.
구문 : 튜플 생성
( <값 1>, <값 2>[, <값 3> ...] )
ex) val info = (5,"korben",true)
info : (Int, String, Boolean) = (5,Korben, true)
튜플의 각 항목은 1부터 시작하는 인덱스를 이용하여 접근할 수 있음.
(ex. 첫번째 항목은 1, 두번째 항목은 2와 같이 접근 가능)
두개의 항목을 가지는 튜플은 생성하는 다른 형식으로 화살표 연산자(->) 를 사용하는 방식이 있음.
튜플에서 키-값 쌍을 표현하는 가장 보편적인 방식
튜플은 데이터를 구조화 하는 일반적인 방법을 제공.
데이터 처리를 위해 개별 항목들을 모아둘 필요가 있을때 유용함.
Language/Scala
Scala 기초 공부 part1
반응형
반응형