본문 바로가기
language/Scala

[Scala] 스칼라 배우기 2. 스칼라 기본 문법1(진입점, 객체, 자료형, 문자열, 변수)

by 스파이디웹 2023. 5. 14.
728x90

Scala의 진입점

  • 싱글톤 객체(object)가 main 함수를 구현하는 방법
// main 함수를 생성App 을 상속하여 실행하는 방법 
object S01_HelloWorldObject {
  def main(args: Array[String]): Unit = {
    println("Hello World main")
  }
}
  • 싱글톤 객체(object)가 App 트레잇을 상속하는 방법

App 트레잇을 상속하는 방법은 extends로 App 트레잇을 상속하고, 실행하고자 하는 코드를 작성하면 순차적으로 실행

object S01_HelloWorld extends App {
  println("Hello World")
}

App 트레잇이 내부적으로 main() 함수를 구현해 주기 때문에, 첫번째 방법과 동작 방식의 차이는 없음


객체

  • 기본자료형, 함수, 클래스등 모든 것을 객체로 취급
  • 객체는 Any를 최상위 클래스로 값(AnyVal) 타입과 참조(AnyRef) 타입을 상속 하여 구현
  • Int, Byte, String 같은 기본 자료형은 AnyVal을 상속하고, 클래스는 AnyRef를 상속

 

객체의 비교

칼라는 모든것을 ==, !=으로 비교

  • == (같음)
  • != (같지 않음)
자바에서는 문자열(String)의 비교는 equals를 이용
== vs ===(spark)
== boolean을 리턴
=== 컬럼을 리턴 (두개의 컬럼 요소에 대한 비교를 포함하는 결과)

자료형

  • 스칼라의 자료형은 자바와 동일
  • 자바의 원시 자료형(Primitive Type)이 존재하지 않음
  • 모든 것이 클래스
  • 자바의 자료형으로 컴파일 시점에 자동으로 변환
  • 숫자형, 논리형, 문자형이 존재
  • 자료형 선언시에 명시적으로 변수의 타입을 선언할 수도 있고, 선언하지 않을 수도 있음
    • 선언하지 않으면 컴파일러가 자동으로 정수형은 Int, 실수형은 Double로 선언

기본 자료형

자료형 사이즈 설명
Byte 8bit -128~127
Short 16bit -32768~32767
Int 32bit -2147483648~2147483647
Long 64bit -9223372036854775808~9223372036854775807
Float 32bit -3.4E38~3.4E38
Double 64bit -1.7E308~1.7E308
Char 16bit 문자형 표현
Boolean 1bit 논리형 참, 거짓 표현

참조 자료형

자료형 설명
String 문자열 표현
Unit 리턴값이 없음을 표현
Null Null 값 표현
Nothing 모든 객체의 서브 타입
Any 모든 객체의 기본 타입
AnyVal 기본 값 타입의 부모 타입
AnyRef 참조 타입의 부모 타입

숫자 자료형

  • 정수형
    • Byte
    • Short
    • Int
    • Long
  • 실수
    • Float
    • Double

캐스팅

정수형과 실수형 사이

  • 업캐스팅 (자동)
    • Byte(8bit) 형을 Short(16bit) 형으로의 변환
  • 다운캐스팅 (명시적)
    • Long(64bit)형을 Int(32bit)형으로 변환
    • 데이터의 손실 우려가 있기 때문
// 메소드를 이용하여 명시적으로 변환 
scala> i = l.toInt
i: Int = 10

데이터형 선언

// 암시적인 선언 
var x = 10
var y = "abc"

// 명시적인 선언 
var b: Byte = 10
var s: Short = 10
var i: Int = 10
var l: Long = 10

// 값에 약어를 추가하여 명시적 선언 
var f = 10.0f
var d = 20.0d

// 암시적인 선언, 컴파일러가 자동으로 타입을 선택 
scala> var ii = 10
ii: Int = 10

scala> var ff = 1.0
ff: Double = 1.0

논리형

논리형 Boolean은 조건문에서 분기를 처리할 때 주로 사용(True, False)

var t = true

if(t)
    println("참")
else
    println("거짓")

문자형

문자형 Char은 하나의 문자를 표현

var c1:Char = 'a'
var c2 = 'b'

변수

  • 가변 변수(variable) → var
    •  재할당이 가능
  • 불변 변수(value) → val
    • 재할당이 불가능
    • 한번 값이 정해지면 변경되지 않기(immutable) 때문에 데이터 처리에 있어 단순하게 처리할 수 있는 장점
    • 동시처리를 중요하게 생각하기 때문에 변경 불가능한 데이터를 중요하게 생각 (선호함)
var variable = 10
val value = 20

// var 값의 재할당은 처리 가능 
scala> variable = 30
variable: Int = 30

/// value 값의 재할당은 오류 발생 
scala> value = 40
<console>:12: error: reassignment to val
       value = 40
             ^

 

 

 

 

참조:

https://wikidocs.net/24675

728x90

댓글