스칼라
-
[스칼라] 애노테이션(Annotation)스칼라 2022. 3. 2. 18:45
Programming in scala 4th edition 27장 1. 애노테이션 문법 애노테이션은 모든 선언이나 정의, 표현식, 타입에 적용 가능하다. @deprecated def deprecatedMethod(): Unit = { } 애노테이션은 메서드, val, var, class, object, trait 등 모든 선언이나 정의에 사용 가능하다. 위의 예에서는 메서드에 사용했다. sealed class Super() case class A() extends Super case class B() extends Super def seeUnchecked(instance: Super): Unit = (instance: @unchecked) match { case A() => println("A") } s..
-
[스칼라] 익스트랙터(extractor)스칼라 2022. 3. 2. 18:00
Programming in scala 4th edition 26장 1. 익스트랙터 익스트랙터는 unapply 메서드를 갖고 있는 객체이다. 패턴 매치 시 익스트랙터 객체를 참조하는 패턴을 만나면 unapply메서드가 호출된다. // selectorString match { case EMail(user, domain) => ... } // 위는 아래의 호출을 일으킴 // EMail(selectorString) object Email { def apply(user: String, domain: String) = user + "@" + domain def unapply(str: String): Option[(String, String)] = { val parts = str split "@" if(parts.l..
-
[스칼라] 컬렉션 자세히 보기스칼라 2022. 2. 28. 22:04
Programming in scala 4th edition 24장 1. 변경 가능, 변경 불가능 컬렉션 변경 가능: 컬렉션 원소의 추가/제거/변경이 가능함 변경 불가능: 메모리상 한 번 할당되면 그 내용을 수정할 수 없음 스칼라 컬렉션은 scala.collection 패키지에 존재한다. scala.collection은 immutable, mutable, generic 세 가지 하위 패키지를 갖는다. collection: mutable과 immutable에서 상속 받아 사용하도록 루트 컬렉션들을 지원 mutable: 변경 가능한 컬렉션이 정의되어있음 immutable: 변경 불가능한 컬렉션이 정의되어있음 generic: 추상화용 구성 요소들이 정의되어있음 2. Iterable 트레이트 컬렉션 계층의 가장 ..
-
[스칼라] 리스트 구현스칼라 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는 맨 앞에 추가/제거를 할 때는 ..