
오늘은 스칼라의 계층 구조에 대해 알아보도록 하겠습니다. 계층구조는 알아두면 개발 시에 분명 도움이 될 일이 있으니 잘 알아두도록 합시다. 1. Any Any는 모든 클래스의 어머니입니다. AnyRef는 그동안 사용하던 "객체"의 클래스로 생각하면 비슷합니다. AnyVal은 그동안 사용하던 "리터럴"의 클래스로 생각하면 비슷합니다. 2. AnyRef java.lang.Object와 동일한 개념입니다. 예제로 아래와 같이 있을 수 있습니다. val x = new String("abc") val y = new String("abc") x == y // true x eq y // false x ne y // true 2.1 equals Java에서 객체 내 값의 동일성을 따질 때 사용하는 메서드입니다. //J..

오늘은 어제에 이어 상속과 구성에 대해 알아보도록 하겠습니다. 이전 글을 보고 싶다면 아래를 참고해 주세요 :) [Scala] Programming in Scala - 10장. 상속과 구성(1) 6장에서 스칼라가 갖추고 있는 객체지향의 기본적인 내용을 살펴 보았습니다. 10장에서는 6장에서 다루지 않은 객체지향 관련 내용을 예제를 통해 자세히 다뤄 봅시다. 1. 2차원 레이아웃 라이브 icandhee.com 5. 메서드와 필드 오버라이드 메서드를 필드로 오버라이드 할 수 있습니다. 이는 자바에서는 제공되지 않는 기능입니다. 스칼라에서는 필드와 메서드가 같은 네임스페이스에 속하기 때문에 가능합니다. class ArrayElement(conts: Array[String]) extends Element { v..

6장에서 스칼라가 갖추고 있는 객체지향의 기본적인 내용을 살펴보았습니다. 10장에서는 6장에서 다루지 않은 객체지향 관련 내용을 예제를 통해 자세히 다뤄 봅시다. 1. 2차원 레이아웃 라이브러리 요소를 2차원 레이아웃으로 배치하고 표현하는 라이브러리를 제작해 보도록 합시다. elem이라는 팩토리 메서드를 사용할 것이고, 요소의 타입은 Element로 하도록 하겠습니다. elem(s: String): Element 이제 다음과 같이 입력하여 결과를 확인해 보도록 하겠습니다. val column1 = elem("hello") above elem("***") val column2 = elem("***") above elem("world") column1 beside column2 hello *** *** wo..
스칼라에서는 내장 제어 추상화가 많지 않은 대신 자신의 고유한 추상화를 작성할 수 있습니다. 이번장에서는 8장에서 배운 함숫값을 활용하여 흐름 제어를 추상화하는 방법에 대해 알아봅시다. 더불어 커링(currying)과 이름에 의한 호출 파라미터(by-name parameter)도 살펴보도록 합시다. 본격적인 내용을 알아보기 전에 먼저 추상화에 대해 간단히 집고 넘어가 봅시다. 추상화란? 구체적인 것은 감추고, 대략적이고 전체적인 그림만 드러내는 것을 의미합니다. 예시로는 함수가 있는데, 함수의 이름을 통해서 구체적으로 하는 일을 추상화 시켜서 나타내는 것이라고 할 수 있습니다. 7장에서의 내장 제어 구문 for, while 등과 같은 문법은 반복문을 추상화한 것이라고 할 수 있습니다. 1. 코드 중복 줄..
오늘은 지난 시간에 이어서 클로저(Closure)에 대해 알아보도록 하겠습니다. 지난 학습 내용을 보시려면 아래 글을 참고해 주세요. [Scala] Programming in Scala - 8장. 함수와 클로저(1) 스칼라는 자바에 존재하지 않는 함수 정의 방법을 몇 가지 제공합니다. 이번 장에서는 함수 정의 방법에 대해 배워봅시다. 1. 메서드 객체의 멤버인 함수를 메서드라고 합니다. 클래스의 필드와 icandhee.com 7. 클로저(Closures) 이전까지의 함수 리터럴 예제는 전달받은 인자만을 참조하였습니다. 하지만 다른 곳에서 정의한 변수를 참조할 수 있습니다. 7.1 자유 변수와 바운드 변수 주어진 함수 리터럴로부터 실행 시점에 만들어낸 객체인 함숫값(객체)을 클로저(Closure)라 부릅니..