Programming in Scala 4/e Chapter 1
Scala를 사용하기 위한 기본적인 문법을 정리하려고 한다.
Scala에서는 반복문 대신 사용할 수 있는 다양한 메서드를 지원한다. 대표적으로 foldLeft, map, filter 등이 그 예이다. 이 각각의 메서드를 알아보려고 한다. 1. foldLeft 📚 Reference foldLeft, map and filter
이 글은 Programming in Scala 4/e를 보고 정리한 글입니다.Class는 class라는 키워드 뒤에 클래스명을 넣어 정의한다.그 후, 해당 클래스를 new를 이용해 객체를 만들 수 있다.위와 같은 형태로 클래스를 정의한다. CheckSumAccumula
Programming in Scala - Chapter 5
이 글은 Programming in Scala 4/e를 읽고 정리한 내용입니다.앞의 포스트들에서는 스칼라의 기본적인 내용을 공부했었다. 지금 포스트부터는 좀 더 완전한 기능을 갖춘 클래스 작성법을 정리하려고 한다.이론적인 내용들보다 예시를 통해 클래스 작성을 정리하려
이 글은 Programming in Scala 4/e를 읽고 정리한 내용입니다.스칼라가 제공하는 내장 제어 구문은 몇 가지 없다. if, while, for, try, match, 함수 호출이 전부이다. 스칼라에 제어 구문의 수가 적은 이유는 설계 초기부터 함수 리터럴
이 글은 Programming in Scala 4/e를 읽고 작성한 글입니다.프로그램이 커질수록 관리가 가능한 작은 조각으로 나눌 수 있어야 한다.스칼라는 이렇게 코드를 분리하여 함수를 만들 때 Java에 존재하지 않는 함수 정의 방법을 몇 가지 제공한다.함수를 정의하
이 글은 Programming in Scala 4/e Chapter 9을 읽고 작성한 글입니다.모든 함수는 비공통 부분과 호출과 관계없이 일정한 공통 부분으로 나뉜다. 공통 부분은 보통 함수의 본문이며, 비공통 부분은 반드시 인자로 주어져야 한다. 함숫값을 인자로 전달
이 글은 Programming in Scala 4/e Chapter 10을 읽고 정리한 글입니다.클래스 간의 근본적인 두 가지 관계에는 상속(Inheritance)과 구성(composition)을 비교할 것이다.구성(composition)은 어떤 클래스가 다른 클래스의
Set는 Iterable이며, 중복된 원소를 포함하지 않는 자료구조이다. 다음은 예시 코드이다.위와 같이 set는 해당 원소가 내부에 존재하는 지 여부를 Boolean형으로 리턴해준다. 그러므로 중복된 원소는 저장이 불가능하다.만약, Set에 원소를 추가하려면 어떻게
Scala를 공부하면서 Scala는 고차함수를 이용하여 코드를 간결하게 할 수 있음을 체크했었다.자주 사용되는 고차함수 메서드들을 정리하려고 한다.고차함수(higher-order function)함수를 인자로 받는 함수많은 컬렉션들이 Iterable을 상속 받고 있다.
Scala는 case class를 지원하는데, case class는 아래와 같은 특징을 가지는 일반 클래스이다.1\. 기본적으로 불변2\. 패턴 매칭을 통해 분해가능3\. 레퍼런스가 아닌 구조적인 동등성으로 비교됨4\. 초기화와 운영이 간결함5\. 자동 코드 생성 -
Scala는 case class를 지원하는데, case class는 아래와 같은 특징을 가지는 일반 클래스이다.1\. 기본적으로 불변2\. 패턴 매칭을 통해 분해가능3\. 레퍼런스가 아닌 구조적인 동등성으로 비교됨4\. 초기화와 운영이 간결함5\. 자동 코드 생성 -
이 포스트는 Programming in Scala 4/e를 읽고 작성한 내용입니다.스칼라의 모든 클래스는 공통의 슈퍼 클래스 Any를 상속한다. 즉, 모든 클래스가 Any의 서브클래스이므로 Any가 정의해둔 메서드는 모두 '보편적인' 메서드이다.어느 객체에서든 Any의
이 글은 Programming in Scala 4/e Chapter 12를 읽고 작성한 글입니다.스칼라에서 trait는 코드 재사용의 근간을 이루는 단위이다. 트레이트로 메서드와 필드 정의를 캡슐화하면 트레이트를 조합한 클래스에서 그 메서드나 필드를 재사용할 수 있다.
trait는 코드 재사용의 근간이 되는 것으로, Scala의 가장 강력한 도구 중 하나이다.그렇다면 모든 곳에 trait를 사용해도 되는것인지, 아니면 때에 따라서는 class 하나로 구현해도 되는지 알아보았다.확고한 규칙이 있는 것은 아니지만 여러 문서나 책에 나와
이 글은 Programming in Scala 4/e를 읽고 작성한 글입니다.규모가 큰 프로그램을 작성할 때는 프로그램의 여러 부분이 서로 의존하는 정도를 나타내는 커플링(coupling)을 최소화하는 것이 중요하다.프로그램의 한 부분에서 언뜻 보기에 아무 문제 없을
이 글은 Programming in Scala 4/e Chapter14를 읽고 작성한 글입니다.단언문과 테스트는 작성한 소프트웨어가 제대로 동작하는 지 확인하는 방법이다.스칼라는 assert 메서드를 호출하는 방식으로 단언문을 작성한다. 단언문은 조건을 만족하지 않는
이 글은 Programming in Scala 4/e Chapter 15를 읽고 작성한 글입니다.케이스 클래스와 패턴 매치는 쌍둥이 구성요소로, 일반적으로 캡슐화되지 않은 데이터구조를 작성할 때 사용한다. 이 두 구성요소는 트리 같은 재귀적 데이터에 유용하다.케이스 클
이 글은 Programming in Scala 4/e Chapter.16을 읽고 작성한 글입니다.스칼라 프로그램에서 가장 많이 사용하는 데이터 구조는 아마도 리스트일 것이다.16장에서는 이러한 리스트의 일반적인 연산을 공부한 다음 중요한 설계 원칙에 대해 알아 볼 것이
이 글은 Programming in Scala 4/e Chapter.17을 읽고 정리한 글입니다.이전 챕터에는 리스트만 알아보았지만, 스칼라에서는 풍부한 컬렉션 라이브러리를 제공한다. 이 챕터에서는 그 컬렉션들에 대해 공부해볼 예정이다.컬렉션을 초기화하고 생성하는 일반
Maven으로 Scala dependency를 추가하려고 한다. 따라서 프로젝트를 만들 때 Maven으로 만들어야 한다. 이 포스트에서는 IntelliJ에서 maven Scala 프로젝트를 시작하는 방법을 정리하려고 한다. 1\. IntelliJ에서 New Proje
우리는 지금까지 "builder based"로 컬렉션들을 사용해왔다. 하지만, 우리는 "view based"라는 컬렉션의 새로운 패턴을 사용할 수 있다. 우리는 collections를 2가지 분류로 나눌 수 있다.(1) 컬렉션이 생성될 때 값을 할당/확인하는 컬렉션 (
이 글은 Programming in Scala 4/e Chapter.32를 읽고 작성한 글입니다.다중코어 프로세서가 널리 퍼지면서 멀티 스레드 환경이 조성되었고 동시에 동시성(concurrency)에 대한 관심도 늘어났다. Java에서는 공유 메모리(shared mem
이 글은 Programming in Scala 4/e Chapter. 32를 읽고 작성한 글입니다.이전 게시물의 예제에서 사용한 apply 메서드 외에 Future 동반 객체는 이미 완료된 퓨처를 만들기 위해 successful, failed, fromTry라는 세 가
앞쪽에서 case class는 class를 선언할 때 컴파일러에 몇 가지 부가기능을 추가하라는 명령어임을 공부하고 정리했었다. 그리고, 이 클래스는 패턴 매칭, 데이터의 모델링으로 사용되기도 했었다.그러면 case class와 유사해보이는 case object는 무엇일
Akka를 공부하다가 예제에서 implicit라는 키워드를 사용하는 것을 보았다. 이 키워드가 정확하게 의미하는 것이 무엇인지 몰랐다. 따라서 implicit에 대해 정리하려고 한다. 또한, 이 내용은 Programming in Scala 4/e Chapter.21
Scala에서는 JVM 기반 언어의 최대 적인 NullPointerException을 functional하게 다룰 수 있는 다양한 수단을 제공하고 있다. 이러한 Exception handling 방법에는 Option, Either, Try가 존재한다.Scala에서는 O
Scala는 Java 5(즉, JDK 1.5)와 같이 파라미터화된 클래스의 빌트인 자원을 제공한다. 즉, 클래스 내부에서 사용할 데이터 타입을 외부에서 지정할 수 있도록 하는 제네릭 클래스를 사용하면 유용하게 개발이 가능하다. 특히, 컬렉션 클래스의 개발에 유용하다.
Reference Scala Official Documentation - 가변성
직렬화는 Java에서 주로 사용되는 것으로 알고 있지만, Scala나 Akka에서도 사용된다. 그렇다면 직렬화가 무엇인지 정리할 예정이다.객체를 저장하거나 메모리, DB 혹은 파일로 옮기려면 직렬화 과정을 거쳐야 한다. 직렬화란 객체를 바이트 스트림으로 바꾸는 것으로,
Akka Concurrency라는 책에서 persistenet data structures에 대해 간략적으로 다루었지만, 알아두는 것이 좋을거 같아 이렇게 따로 정리해둔다.함수형 프로그래밍 패러다임의 핵심적인 측면들 중 하나는 순수 함수들을 통해 불변의 값들을 변환하는
직역하면 Partial Function은 부분 함수이다. 이를 풀어 쓰면 다음과 같다. f:X → Y인 함수에 대한 부분 함수는 g:X' → Y이다. 이때, X'는 X의 subset이다.라는 것이 Partial Function의 정의이다.스칼라의 partial func
우리는 type 키워드를 통해 복잡한 타입을 간단하게 선언할 수 있도록 도와준다.위는 type 키워드를 사용한 예시이다. row라는 새로운 타입은 List\[Int]를 축약한 키워드로 선언하였으며, matrix는 Listrow, 즉 List\[List\[Int]]를 축
Partial Function을 사용하면 특정 부분 집합에 대한 함수를 정의할 수 있다. (Partial Function이 무엇인지 기억이 나지 않는다면 Partial Function을 정리한 포스트에서 확인할 수 있다.)대표적인 예가 밑과 같은 코드이다.Double형
이 글은 Manning Functional Programming in Scala의 2.5절 Polymorphic functions를 읽고 작성한 글입니다.Manning Functional Programming in Scala 책에서 이전까지의 챕터에서는 단일형, 즉 동