독서관련/Programming in Scala

Scala CH01. 확장 가능한 언어

ColinKang 2020. 3. 29. 13:13
아래의 글은 마틴 오더스키,렉스 스푼,빌 베너스 공저 / 오현석,이동욱,반영록 공역, 『Programming in Scala 3/e
』,에이콘출판사(2017), CH01의 내용을 기반으로 작성하였습니다.

optional

 

  • scala
    1. scalable
    2. object oriented
    3. functional
    4. statically typed language
    5. library abstraction
    6. trait : pluggable like interface ( 하지만 메소드 정의 가능 (java 8 디폴트 메서드), 필드도 정의 가능)
    7. mixin : like multiple inheritance
    8. function literal

 

언어를 사용자가 필요한 방향으로 고칠수 있게 허용

함수 값도 객체다

함수 타입은 서브클래스가 상속할 수 있는 클래스다

함수와 객체의 통합

순수한 객체 지향 언어 (모든 값은 객체이며, 모든 연산은 메소드 호출)

스칼라는 함수형이다

함수형 프로그래밍의 기초는 lambda 계산법

OOP 관점에서 

객체 : 데이터와 연산

객체의 미결 측면

객체가 아닌 값 존재 : primative type

어떤 객체의 멤버도 아닌 필드, 메소드 : static filed and method

 

함수형 프로그래밍 조건

  1. 일급함수

함수 : first class 즉 정수나 문자열 같음

함수를 다른 함수에 인자로 넘기거나, 

함수의 결과를 함수로, 

함수를 변수에 저장

다른 함수의 내부에서 함수 정의

함수를 1급 계층으로 만들면, 한수가 내부에서 함수를 반환하면, 그 함수 값 안에서 모든 변수를 단은 환경을 저장해 두어야 문제가 생기지 않는다. 이 처리를 위해서 클로저

2. 변경 불가능 immutable 데이터, 메소드 side effect 가 없어야 함, 입력값 함수 출력값, referentially transparent

메소드는 인자를 받아서 결과를 반환하는 방식에서 새로운 값을 반환하는 것 이외에는 다른 영향을 시스템에 주지 않아야 함.

주어진 입력에 대해서 영향을 주지 않음.

s.replace

 

함수를 일반화 하면 표현력이 늘어남

 

 

scala가 프로그래밍 언어로 좋은 이유

  1. 스칼라는 호환성이 좋다.
    1. 스칼라는 jvm의 바이트 코드로 컴파일 된다
    2. 스칼라 코드는 자바 메소드를 호출할 수 있고, 자바 필드에 접근할 수 있고, 자바 클래스 상속하거나, 자바 인터페이스를 구현할 수 있다
    3. 대부분의 스칼라 코드는 자바 라이브러리를 사용함.
  2. 스칼라는 간결하다
    1. 코드수가 자바대비 절반정도
    2. class Myclass(index : Int, name : String) : 클래스 선언, private 2개 선언, 2개까지 생성자 선언 완료 : 간결함
  3. 스칼라는 고수준이다
    1. 저차원 (데이터 직접 접근)이 아닌 고차원 질의 에 의한 처리
    2. val nameHasUpperCase = name.exists(_.isUpper)
    3. function literal : _.isUppper
  4. 스칼라는 정적타입언어이다
    1. 제네릭, 교집합, 추상타입
    2. 정적타입 시스템 이지만, 타입 추론, 패턴매치, 타입합성
    3. 프로퍼티 검증 - 타입 테스트 코드
    4. 안전한 리팩토링 - 변경하면 컴파일 안되는 부분 표시
    5. 문서화 

 

타입이란 : 프로그램에서 어떤 변수 등이 취할 수 있는 값의 범위와 그 변수에 적용할 수 있는 연산의 종류를 정하고, 컴파일러나 인터프리터가 이를 미리 검증해주는 것

자바와 차이나는 점 : 자바는 변수 선언형태 (타입 변수 String aaa)인데 스칼라는 (변수 타입 aaa String) 임, 변수 타입의 형태는 타입 추론에 유리하며, 생략하기가 쉬움.