스칼라
-
[스칼라] 리스트 구현스칼라 2022. 2. 27. 00:22
Programming in scala 4th edition 22장 1. 스칼라 리스트 List는 scala.collection.immutable 내에 추상 클래스로 정의되어있다. sealed abstract class List[+A] { ... } 타입 파라미터가 +A로 선언되어있기 때문이 List는 공변적이다. 따라서 List[Int]는 List[Any] 타입의 변수에 할당할 수 있다. List에는 다음 세 가지 연산이 추상메서드로 정의되어있고 모든 리스트 연산은 세 가지 기본 메서드로 만들 수 있다. def isEmpty: Boolean def head: A def tail: List[A] 스칼라는 추상 클래스인 List를 상속받아 ::[A]와 Nil를 정의한다. Nil 객체 Nil 객체는 빈 리스트..
-
[스칼라] 암시적 변환과 암시적 파라미터 (implicit)스칼라 2022. 2. 26. 16:42
Programming in scala 4th edition 1. 암시적 변환 스칼라에서는 맞지않는 타입때문에 컴파일에러가 발생했을때 암시적인 변환규칙이 있는지를 찾아본다. import java.awt.event.{ActionEvent, ActionListener} import javax.swing.JButton val button = new JButton() button.addActionListener( new ActionListener { def actionPerformed(event: ActionEvent) = { println("pressed") } } ) 자바 스윙에서 버튼을 추가할때 버튼을 눌렀을때의 동작을 정의하는 방법은 위와 같다. addListener를 이용해서 ActionListener를..
-
[스칼라] 추상 멤버스칼라 2022. 2. 25. 00:36
Programming in scala 4th edition 20장 1. 추상 멤버 추상멤버: 완전히 정의되지 않은 클래스나 트레이트의 멤버 type, def, val, var 로 정의되는 타입, 함수, 변수들은 추상 멤버로 정의할 수 있다. trait Abstract { type T def transform(x: T): T val initial: T var current: T } class AbstractImpl extends Abstract { type T = String override def transform(x: T): String = x + x val initial = "hi" var current = "abcd" } 2. 타입 멤버 추상 타입: 클래스나 트레이트 내부에 정의 없이 선언만 된 형..
-
[스칼라] 컬렉션스칼라 2022. 2. 23. 00:11
Programming in Scala 4th edition 17장 1. 시퀀스 시퀀스 타입: 순서가 정해진 데이터 그룹을 가지고 작업할 수 있다. 시퀀스 타입들은 인덱스로 원소를 조회할 수 있다. 리스트 List: 변경 불가능한 연결리스트로 구현되어있다. head 추가, 삭제를 빠르게 처리 할 수 있다. 배열 Array: 배열은 임의의 위치에 있는 원소를 효율적으로 접근하게 한다. val integerArray = new Array[Int](5) integerArray // Array(0, 0, 0, 0, 0) val integerArray2 = Array(1, 2, 3, 4, 5) integerArray2 // Array(1, 2, 3, 4, 5) 리스트 버퍼 List는 맨 앞에 추가/제거를 할 때는 ..
-
[스칼라] 리스트스칼라 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 변수와 숫자 단항/이항 연산자를 정의한 클래스들이다. 케이스클래스 위의 클래스 선언에서 ..