
오늘은 스칼라의 계층 구조에 대해 알아보도록 하겠습니다. 계층구조는 알아두면 개발 시에 분명 도움이 될 일이 있으니 잘 알아두도록 합시다. 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)라 부릅니..
스칼라는 자바에 존재하지 않는 함수 정의 방법을 몇 가지 제공합니다. 이번 장에서는 함수 정의 방법에 대해 배워봅시다. 1. 메서드 객체의 멤버인 함수를 메서드라고 합니다. 클래스의 필드와 메서드를 합쳐 멤버라고 합니다. 함수를 정의하는 가장 흔한 방법은 특정 객체의 멤버로 함수를 만드는 것입니다. 즉, 메서드를 만드는 것입니다. 지금까지 알고 있던 메서드는 다른 객체지향 언어와 매우 유사할 것입니다. 하지만 스칼라에서의 함수는 메서드를 포함하는 더 일반적인 개념입니다. 2. 지역함수 함수형 프로그램의 중요한 설계 원칙 중 하나는, 프로그램을 잘 정의된 작업을 수행하는 다수의 아주 작은 함수로 나눠야 한다는 점입니다. 이 방식은 더 어려운 일을 처리하기 위해 유연하게 조립할 수 있는 빌딩 블록(build..
지난 포스팅에 이어 내장 제어구문에 대해 이어서 학습해 보도록 하겠습니다. 이번 포스팅에서는 try표현식을 학습할 예정이며, if/while/for에 대해서는 아래 글을 참고해 주세요 :) [Scala] Programming in Scala - 7장. 내장 제어 구문 오랜만에 스칼라 학습 시간입니다. 오늘은 스칼라의 내장 제어 구문에 대해 알아보도록 하겠습니다. 스칼라가 제공하는 내장 제어 구문은 if, while, for, try, match, 함수 호출밖에 없습니다. 그리고 icandhee.com 5. try 표현식으로 예외 다루기 스칼라의 예외는 다른 언어와 유사하게 동작합니다. 발생한 예외를 잡아서 처리할 수도 있고, 밖으로 던질 수도 있습니다. 5.1 예외 발생시키기 스칼라에서 예외를 발생시키는..
오랜만에 스칼라 학습 시간입니다. 오늘은 스칼라의 내장 제어 구문에 대해 알아보도록 하겠습니다. 스칼라가 제공하는 내장 제어 구문은 if, while, for, try, match, 함수 호출밖에 없습니다. 그리고 스칼라의 내장 제어 구문은 대부분 반환 값이 있습니다. 1. Intro 자바와 같은 명령어 언어에서는 삼항 연산자와 if 문이 별개의 문법으로 존재합니다. *삼항 연산자 : 반환 값을 지닌 if문 입니다.(ex. 조건식 ? 반환값1 : 반환값2) 하지만, 스칼라의 if문은 기본적으로 반환 값을 가지고 있습니다. 그 외에 for, try, match 구문도 반환 값을 가지고 있습니다. 오직 while 내장 제어 구문만이 반환값을 가지고 있지 않습니다. 내장 제어 구문이 반환 값이 없는 명령어 언..