스칼라
-
[스칼라] 리스트스칼라 2022. 2. 22. 17:37
// List(3, 4, 5) List(1, 2, 3, 4, 5) Programming in scala 4th edition 16장 1. 리스트 리터럴 val numbers = List(1, 2, 3) val tuples = List( List(1, 2), List(2, 3), List(3, 4) ) 리스트와 배열는 두가지 차이점이 있다. 리스트는 변경 불가능하다. 리스트의 원소는 할당문으로 바꿀 수 없다. 리스트의 구조는 재귀적이지만 배열은 평면적이다. 2. 리스트 타입 리스트는 같은 타입의 원소로 이루어져있다. List[T], T 타입의 원소만 가질 수 있음 또한 리스트 타입은 공변적이다. T와 서브타입 S가 있을때 List[S]도 List[T]의 서브 타입이다. 예를들어서 List[String]은 ..
-
[스칼라] 케이스 클래스와 패턴 매치스칼라 2022. 2. 21. 17:40
참고: Programming in scala 4th edition 15장 1. 산술표현식 예 산술표현식을 구현하는 예제를 가지고 케이스 클래스와 패턴 매치를 설명한다. abstract class Expr case class Var(name: String) extends Expr case class Number(num: Double) extends Expr case class UnaryOperator(operator: String, arg: Expr) extends Expr case class BinaryOperator(operator: String, left: Expr, right: Expr) extends Expr 변수와 숫자 단항/이항 연산자를 정의한 클래스들이다. 케이스클래스 위의 클래스 선언에서 ..
-
[스칼라] 트레이트스칼라 2022. 2. 20. 12:56
Programming in scala 4th edition 12장을 읽고 정리한 내용입니다. 0. 트레이트 트레이트는 코드 재사용을 쉽게 하기 위해 스칼라에서 제공하는 개념이다. 자바 인터페이스랑 유사하다고 생각하면 처음 접근할때 쉽다. 트레이트는 메서드와 필드로 이루어지고 클래스에서는 여러개의 트레이트를 Mixin(믹스인) 해서 기능을 구현할 수 있다. 트레이트의 핵심은 다음 두가지다 간결한 인터페이스를 확장해 풍부한 인터페이스를 만듬 쌓을수 있는 변경을 정의함 1. 트레이트 동작 원리 trait을 정의하는 방법은 클래스를 정의하는 방법과 같다. trait Philosophical { def philosophize() = { println("나는 메모리를 사용한다, 고로 존재한다!") } } 트레이트 ..
-
[스칼라] 스칼라 계층구조스칼라 2022. 2. 13. 15:22
programming in scala 4th edition 11장을 읽고 정리한 것입니다. 1. 스칼라의 클래스 계층구조 스칼라의 최상위 계층에는 Any가 정의되어있고 Scala any에 정의되어있는 메서드는 다음과 같다. 스칼라의 모든 클래스는 Any를 상속받기 때문에 스칼라 클래스는 기본적으로 동치비교, 해시값얻기, 문자열로 변환을 사용할 수 있다. final def ==(that: Any): Boolean final def !=(that: Any): Boolean def equals(that: Any): Boolean def ##: Int def hasCode: Int def toString: String 루트 클래스 Any에는 AnyVal, AnyRef라는 서브클래스가 있다. AnyVal은 모든 ..
-
[스칼라] 상속과 구성스칼라 2022. 2. 3. 00:03
Programming in scala 4th edition을 읽고 정리한 글입니다. 1. 2차원 레이아웃 라이브러리 상속, 구성, 추상클래스, 오버로드 등을 설명하기 위해서 2차원 레이아웃 라이브러리를 예시로 설명한다. 이 라이브러리는 elem이라는 팩토리 메서드를 통해 Element 객체를 생성한다. Element 객체는 각 요소를 가지고 있고 above나 beside같은 메서드를 호출해서 요소들을 연산할 수 있다. 예를 들어서 아래와 같은 표현식은 높이 2인 열 2개를 만든다. val column1 = elem("hello") above elem("***") val column2 = elem("***") above elem("world") column1 beside column2 // 출력 결과 he..
-
[스칼라] 흐름 제어 추상화스칼라 2022. 2. 1. 23:03
Programming in scala 4th edition 을 읽고 정리한 글입니다. 1. 코드 중복 줄이기 스트링으로 이루어진 어떤 리스트에서 끝 단어를 가지고 질의하면 그에 맞는 스트링만 리턴해주는 프로그램이 있다. object StringMatcher { private def getStrings() = List( "Ironman", "Kafka", "Korean man", "Son Heung min", "Korea drama" ) def stringsEnding(query: String) = for(string Unit) = { val connector = new Connector(config) try { op(connector) } finally { connector.close() } } // 아..
-
[스칼라] 함수와 클로저스칼라 2022. 1. 31. 21:51
(x: Int) => x + 1 // 함수 리터럴의 예 // 인터프리터의 출력 res1: Int => Int = Programming in scala 4th edition을 읽고 정리한 내용입니다. 1. 메서드 메서드는 객체 안의 멤버인 함수이다. 스칼라에서 함수는 메서드를 포함한 좀 더 넓은 개념이다. class ClassExample { val postFix = "ClassExample`s method" //메서드 def printFunction(s: String): Unit = { println(getModifiedString(s)) } //메서드 private def getModifiedString(str: String): String = { s"$postFix: $str" } } 2. First..
-
[스칼라] 내장 제어 구문스칼라 2022. 1. 31. 00:31
Programming in scala 4th edition을 읽고 정리한 내용입니다. 스칼라의 내장 제어 구문은 if, while, for, try, match, 함수 호출이 전부다. 대부분의 스칼라 제어 구문은 결과 값을 내놓는 형태로 구현되어있다. 1. if 표현식 예를들어서 입력이 있으면 그 입력값을 리턴하고 입력값이 없으면 "default" 라는 값을 할당하는 코드를 구현한다고 하자. 명령형 스타일로 작성한다면 아래와 같을 것이다. def ifStatementFunction(input: String): String = { var name = "default" if (!input.isEmpty) name = input name } println(ifStatementFunction("")) print..