ka373

러닝 스칼라 02] 일급 함수, 컬렉션, 클래스와 객체, 케이스 클래스, 트레이트에서 몇가지 본문

10. 스칼라

러닝 스칼라 02] 일급 함수, 컬렉션, 클래스와 객체, 케이스 클래스, 트레이트에서 몇가지

ka373 2019. 9. 2. 11:33

1. 일급 함수

함수를 일급 (first-class) 객체로 취급

함수형 프로그래밍의 핵심 가치 중 하나

함수가 선언되고 호출되는 것 외에 다른 데이터 타입처럼 언어의 모든 부분에 사용될 수 있다는 것임

식별자(identifier)에 할당되지 않고도 리터럴 형태로 생성 가능

, 변수 또는 데이터 구조처럼 컨테이너에 저장 가능

다른 함수에 매개변수로 사용되거나 다른 함수의 변환 값으로 사용 가능

고차함수(higher-order function)

다른 함수를 매개변수로 받아들이거나 반환값으로 함수를 사용하는 함수

프로그램이 무엇이 되어야 하는지를(what) 기술하는 관점에서 프로그램 작성 가능 선언형 프로그래밍

 

_____________________________________________________________

2. 컬렉션

컬렉션(collection)프레임워크

주어진 타입을 가지는 하나 또는 그 이상의 값을 수집하는 데이터 구조 제공 : 배열, 리스트, , 집합, 트리 등

불변의 컬렉션

리스트(List), 집합(Set), (Map)

가변 컬렉션

버퍼(Buffer), 집합(Set), (Map)

배열

 

불변의 타입 가변적인 대응 타입
collection.immutable.List collection.mutable.Buffer
collection.immutable.Set collection.mutable.Set
collection.immutable.Map collection.mutable.Map

 

스트림

 + 하나 그 이상의 시작 요소들과 재귀 함수로 생성되는 지연(lazy) 컬렉션

 + 다른 불변의 컬렉션들은 그 내용의 100%를 초기화 시점에 받지만, 스트림의 구성 요소들은 최초로 접근될 때 컬렉션에 추가됨

 + 생성한 구성 요소들은 나중에 추출될 때를 대비하여 캐시에 저장되어 각 요소가 한 번만 생성됨을 보장

 + 무한히 커질 수 있으며, 이론적으로 구성 요소들이 접근 시에만 현실화 되는 무한 컬렉션

모나딕 컬렉션

 + 둘 이상의 요소는 포함할 수 없는 컬렉션

 + Option 컬렉션: 크기가 1이 넘지 않는 컬렉션, 단일 값의 존재 또는 부재를 나타냄, null값의 대체재로 사용 가능

 + Try 컬렉션: 에러 처리를 돕는 컬렉션

 + future 컬렉션: 백그라운드 작업을 개시하는 컬렉션

 

_____________________________________________________________

3. 클래스, 객체

클래스(class)

데이터 구조와 함수의 조합

게터, 세터 자동 생성

객체(object)

하나 이상의 인스턴스를 가질 수 없는 형태의 클래스

new 키워드로 인스턴스를 생성하는 대신 이름으로 직접 해당 객체에 접근

_____________________________________________________________

4. 케이스 클래스, 트레이트

 

케이스 클래스(case class)

자동으로 생성된 메소드 몇 가지를 포함하는 인스턴스 생성이 가능한 클래스

자동으로 생성되는 동반 객체를 포함하는데, 이 동반 객체도 자신만의 자동으로 생성된 메소드를 가지고 있음

트레이트

다중 상속을 가능하게 하는 클래스 유형 중 하나

클래스, 케이스 클래스, 객체, 트레이트는 모두 하나 이상의 클래스를 확장할 수 없지만, 동시에 여러 트레이트를 확장할 수는 있음

트레이트를 믹스인하는 순서에 따라 호출 메소드가 결정

선형화(linearization)

 

_____________________________________________________________

스칼라는 함수형 프로그래밍의 핵심 가치 중 하나인 일급함수를 지원하며,

이를 통해 선언적으로 프로그래밍할 수 있다.

스칼라는 불변 및 가변 컬렉션 구조를 제공하며, 서로 전환할 수 있다.

스칼라는 기본적인 클래스 외에 객체, 케이스 클래스, 트레이트를 제공하며, 이를 통해 더 구조적이고 효율적으로 객체지향 프로그래밍이 가능하다.

Comments