프로그래밍

[Scala] 공부 내용 정리

손가든 2024. 7. 12. 15:17

"class A extends B with C"

  • 이 때, C는 스칼라 언어에서 Trait라고 부르며, Java의 인터페이스와 유사하지만 구체적인 메서드 구현을 포함할 수 있다.
  • 예시 코드는 다음과 같다
trait C {
  def traitMethod(): Unit = {
    println("This is a method from trait C")
  }
}
 
class B {
  def superClassMethod(): Unit = {
    println("This is a method from class B")
  }
}
 
class A extends B with C {
  def classAMethod(): Unit = {
    println("This is a method from class A")
  }
}
 
object Main extends App {
  val a = new A
  a.superClassMethod()  // This is a method from class B
  a.traitMethod()       // This is a method from trait C
  a.classAMethod()      // This is a method from class A
}

 

Object

  • Scala Object는 싱글톤 객체임
  • Spring Context에 속하게 되는 bean 객체들처럼 선언해두면 해당 객체의 def 함수는 프로그램의 어느 곳에서나 사용이 가능함
  • 이때, 해당 객체들은 지연 생성 방식으로, 누군가 실제로 사용할 때에 생성됨

 

 

Pattern Matching

  • 패턴에 대해 값을 확인하는 매커니즘
  • Java의 switch 명령문보다 강력한 버전
  • if/else 대신 사용할 수도 있음
  • 예제는 다음과 같다 
import scala.util.Random
 
val x: Int = Random.nextInt(10)
 
x match
  case 0 => "zero"
  case 1 => "one"
  case 2 => "two"
  case _ => "other"
  • 해당 예제는 다음과 같이 함수화할 수도 있다. 
def matchTest(x: Int): String = x match
  case 1 => "one"
  case 2 => "two"
  case _ => "other"
 
matchTest(3)  // returns other
matchTest(1)  // returns one

 

Enumeration

  • enum 클래스는 extends Enumeration을 통해 생성되며, 해당 값들은 Value()라는 함수를 통해 값을 선언한다
  • 예시 
object LnaCmdType extends Enumeration {
  val OnlineStandbyControl = Value("$SWT")
  val OnlineStandbyControlSecondForm = Value("$SWP")
  val AutoManualControl = Value("$MOD")
  val AutoManualControlSecondForm = Value("$MOU")
  val CurrentLimitChangeAlarm = Value("?LIM")
  val ModeChangeAlarm = Value("?MOD")
  val ModeChangeAlarmSecondForm = Value("?MOR")
  val AmplifierOnlineAlarm = Value("?SWT")
  val AmplifierOnlineAlarmSecondForm = Value("?SWS")
  val DateTimeChangeAlarm = Value("?CLK")
  val AmplifierFaultAlarm = Value("Q")

 

함수의 인자

  • `def create(cmdType: LnaCmdType.Value, param: Any = ""): LnaCmd` 코드에서 param 인자의 "Any" 와 = "" 의 의미가 무엇인가에 대한 고찰
    • Any는 scala의 최상위 타입으로, 모든 타입이 될 수 있도록 설정한 것임
    • = "" 는 해당 값의 초기 값, default 값을 생성한 것임