ka373
러닝 스칼라 02] 일급 함수, 컬렉션, 클래스와 객체, 케이스 클래스, 트레이트에서 몇가지 본문
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)
_____________________________________________________________
•스칼라는 함수형 프로그래밍의 핵심 가치 중 하나인 일급함수를 지원하며,
이를 통해 선언적으로 프로그래밍할 수 있다.
•스칼라는 불변 및 가변 컬렉션 구조를 제공하며, 서로 전환할 수 있다.
•스칼라는 기본적인 클래스 외에 객체, 케이스 클래스, 트레이트를 제공하며, 이를 통해 더 구조적이고 효율적으로 객체지향 프로그래밍이 가능하다.
'10. 스칼라' 카테고리의 다른 글
러닝 스칼라 03] 객체, 클래스, 개발환경 등 (0) | 2019.09.02 |
---|---|
러닝 스칼라 01] 스칼라 소개, 데이터, 표현식 등 (0) | 2019.09.02 |
스칼라 설치부터 Hello world까지 (0) | 2019.08.31 |
스칼라 공부: 러닝 스칼라 (0) | 2019.08.31 |