콘텐츠로 이동

자바 개발자를 위한 스칼라 프로그래밍

자바 개발자를 위한 스칼라 프로그래밍

1. 스칼라 맛보기

  • 스칼라에서는 불변형 자료구조와 함수형 프로그래밍 구문뿐만 아니라 병렬 컬렉션에 대해서도 기본 지원
  • 병렬로 실행되는 코드가 제대로 동작하게 만들때 자바보다 유리
  • 클래스에서 생성자 파라미터 필드로 가지게 하려면 변수 이름 옆에 val, var 써야함
    • class Money(val amount: Int)
  • 케이스 클래스는 new 키워드를 사용하지 않고도 인스턴스를 생성하는 팩토리 메서드 제공
  • 스칼라에서느 클래스의 필드에 대한 스코프 default로 public
    • 따라서 private으로 지정해 막던가 해라
  • 여러개의 파라미터에 대해 값 지정할 때에는 파라미터 이름을 일일히 명시하는게 좋다
  • 불변형 컬렉션(스칼라 기본)을 통해 덧셈, 업데이트, 삭제 등의 연산을 수행할 때 직접 수정하지 않고, 이러한 연산 적용한 컬렉션 새로 만들어 리턴
  • 람다는 파라미터로 전달할 수 있는 함수
    {
      input => body
    }
    
  • 스칼라 컬렉션 기본으로 불변
    • 멀티프로세서 아키텍처 환경에서 의도한 대로 코드 정확히 동작
    • 병렬 처리 기본 지원
  • 리스트 병합시 특이 코드 (모든 결과가 같다)
    val list1 = List(1, 2, 3)
    val list2 = 1 :: 2 :: 3 :: Nil
    val list3= Nil.::(3).::(2).::(1)
    
  • Any
    • AnyVal
      • Int
      • Byte
      • Boolean
      • Char
    • AnyRef
      • String
      • Vector
      • List
  • 리스트 순회시 _는 현재 원소를 뜻함
  • 스코프 내에 있는 변수는 모두 스트링 안에 담아서 처리 가능

2. 코드 연동

  • 생성자
    • 보조 생성자는 반드시 this(...)로 기본 생성자를 호출할 것
    • 마지막에 기본 생성자를 호출해 모든 파라미터 초기화 할 것
  • trait
    • 일부 메서드에 대해서 구현 코드 담을 수 있어 재사용성 좋음
    • 클래스에 특정한 동작을 추가하고 싶다면 고려해볼것
    • trait extends class 와 같은 문법도 가능 ㄷㄷ
    • with으로 trait 나타내는데, <- 방향으로 호출됨
  • object
    • static 개념을 대신하여 사용
    • 싱글톤 인스턴스 만들 수 있음
    • 인터페이스/trait 상속 가능
  • 컴패니언 오브젝트
    • 클래스와 이름이 같은 싱글톤 오브젝트 at 동일한 패키지와 파일
  • Java vs Scala 코딩 컨벤션
    • 자바: 순차적 상태변경 명령형 스타일
    • 스칼라: 표현식으로 코드 구성하는 선언적 방식