Posts [Learning Scala] Chapter2. 데이터로 작업하기: 리터럴, 값, 변수, 타입
Post
Cancel

[Learning Scala] Chapter2. 데이터로 작업하기: 리터럴, 값, 변수, 타입

출처 : https://jpub.tistory.com/677

이 글은 러닝 스칼라를 기반으로 작성 되었습니다.

스칼라 데이터의 정의

    • 불변의 타입
    • 재할당 불가
  • 리터럴 (리터럴 데이터)
    • 숫자, 문자, 텍스트 등 데이터
  • 변수
    • 가변 타입
    • 재할당 가능
  • 타입
    • 데이터의 종류, 데이터의 정의 또는 분류
    • 스칼라의 모든 데이터는 특정 타입에 대응
    • 모든 스칼라 타입은 데이터와 그 데이터를 처리하는 메소드를 갖는 클래스로 정의

값 (Value)

val 키워드를 사용하여 불변한(immutable) 값을 정의할 수 있습니다.

1
2
3
4
5
6
7
// val <식별자>[: <타입>] = <데이터>

val x: Int = 20
val greeting: String = "Hello, Scala!"
val at: Char = '@'

x = 1000 // error: 재할당 불가

변수 (Variable)

var 키워드를 사용하여 변경이 가능한(mutable) 변수를 정의할 수 있습니다.

1
2
3
4
5
6
7
// var <식별자>[: <타입>] = <데이터>

var myStr: String = "Hello"
var myInt: Int = 100

myStr = "Hi" // 재할당 가능
myInt = "Scala" // error : Type missmatch

타입 (Type)

  • 스칼라는 숫자 타입(Int, Double 등) 과 숫자가 아닌 타입 (String 등)이 있음.
  • 스칼라는 원시 데이터 타입 (primitive type)이 없음.

타입 추론

값이나 변수를 선언 시 타입을 명시하지 않고 할당된 데이터를 기반으로 타입을 추론할 수 있습니다.

1
2
3
val myVal = 10 // Int 값으로 추론됨

var myVar = "Hello" // String 변수로 추론됨

숫자형 데이터 타입 (Number Data Type)

순위이름설명크기 (Byte)최소최대
1Byte부호 있는 정수1-128127
2Short부호 있는 정수2-3276832767
3Int부호 있는 정수4-2^312^31 - 1
4Long부호 있는 정수8-2^632^63 - 1
5Float부호 있는 부동 소수점4n/an/a
6Double부호 있는 부동 소수점8n/an/a

숫자 타입 간 자동 변환

1
2
3
4
5
6
// 위의 표에서 낮은 순위에 있는 타입은 자신보다 높은 타입으로 자동 변환이 가능하다. 
val b: Byte = 10
val s: Short = b 
val d: Double = s 

val i: Int = d // Double은 Int보다 높은 순위의 타입으로 변환 불가

메소드를 사용한 숫자 타입 간 변환

1
2
val l: Long = 10
val i: Int = l.toInt // Int 타입으로 변환

숫자 리터럴(Literal) 표현

1
2
3
4
5
6
val myInt = 10 // Int
val myHex = 0xffff00 // 접두사 0x : 16진수
val myLong = 200L // 접미사 L(l) : Long
val myDouble = 2.0 // Double
val myFloat = 10f // 접미사 f : Float
val myDouble2 = 2d // 접미사 d : Double

문자열 (String)

스칼라의 String 은 자바의 String 을 기반으로 했습니다. 침고!

기본 사용법

1
2
3
4
5
6
7
8
9
# REPL

scala> val hello = "hello"
val hello: String = hello

scala> val helloScala = "hello \nscala"
val helloScala: String =
hello
scala

여러줄 리터럴

  • 큰 따옴표 세 개를 사용하여 여러줄 리터럴리 가능함.
  • 특수문자의 시작인 역슬래시를 인식하지 못함.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# REPL

scala> val multipleLine = """scala
     | java
     | kotlin
     | jvm
     | \t
     | \n"""
val multipleLine: String =
scala
java
kotlin
jvm
\t
\n

문자열 보간 (String Interpolation)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
val alan = "alan"

println("Hello, " + alan) // Hello, alan
println(s"Hello, $alan") // Hello, alan

val num = 10

println(s"num : $num") // num : 10
println(s"num * 3 : ${num * 3}") // num * 3 : 30

// printf
val item = "apple"

println(f"I wrote a new $item%.3s today") // I wrote a new app today
println(f"$item count : ${355 / 113.0}%.5f") // apple count : 3.14159

튜플

  • 둘 이상의 값을 가지는 순서가 있는 컨테이너.
  • 각각의 값은 다른 타입을 가질 수 있음.
  • 값을 논리적으로 분류할 필요가 있으며 분류한 값들을 하나의 응집된 단위로 표현하는데 유용함.
  • 리스트, 배열과는 다르게 요소들을 반복할 수는 없고 단지 하나 이상의 값을 담기 위한 컨테이너.
1
2
3
4
5
6
7
8
val infos = ("alan", "bae", 8, 31)
println(infos._1) // alan

val red = "red" -> 0xff0000
println(red) // (red,16711680)

val reversedRed = red._2 -> red._1
println(reversedRed) // (16711680,red)
This post is licensed under CC BY 4.0 by the author.

[JPA] Spring Data JPA와 Querydsl (feat. Spring MVC)

[Learning Scala] Chapter3. 표현식과 조건문

Comments powered by Disqus.