모던 자바 인 액션 20장 : 함수형 프로그래밍 기법

Adam·2024년 7월 19일
0

모던 자바 인 액션

목록 보기
19/20
post-thumbnail

스칼라 코드에서는 모든 자바 라이브러리를 사용할 수 있다

스칼라는 자바에 비해 더 다양하고 심화된 함수형 기능을 제공

스칼라 소개

자바에서는 클래스 내에 main 메서드를 선언했지만 스칼라는 object로 직접 싱글턴 객체를 만들 수 있다

스칼라에서 object 내부에 선언된 메서드는 정적 메서드로 간주할 수 있다→ main 메서드의 시그니처에 static이 없는 이유

함수형 프로그래밍 시 스칼라 코드는 자바 코드보다 간결

컬랙션 만들기

// 맵
val authorsToAge = Map("Adam"->30, "Victoria"->28)
// 리스트
val authors = List("Adam", "Victoria")

컬랙션은 기본적으로 불변: 어디서 컬랙션을 갱신했는지 크게 신경 쓰지 않아도 되어 암묵적인 데이터 의존성을 줄일 수 있다

어떤 컬랙션을 갱신할때 기존 컬랙션을 업데이트 하는 것이 아니라 새로운 객체를 생성함

scala.collection.mutable로 가변 컬랙션도 지원하긴 한다

튜플

자바는 튜플을 지원하지 않고 직접 자료구조를 만들어야 한다

직접 구현을 하여도 가독성과 유지보수성을 떨어트린다

스칼라에서는 임의 크기 튜플을 제공

val book(2018, "Modern Java in Action", "Manning")
print(book._1)

_1등의 접근자로 튜플 요소에 접근 가능

스트림

자바의 스트림은 요청할 때만 평가 됨(게으른 평가) → 메모리 오버플로 없이 무한 시퀀스를 표현 가능

스칼라의 스트림은 이전 요소가 접근할 수 있도록 기존 계산값을 기억

인덱스를 제공하여 인덱스로 스트림의 요소에 접근 가능

다만 이런 기능 때문에 자바의 스트림에 비해 메모리 효율성이 조금 떨어진다

옵션

자바의 Optional과 같은 기능을 제공

자바의 호환성 때문에 스칼라에도 null이 존재하지만 되도록 사용하지 않는 것이 좋음

함수

스칼라의 함수: 어떤 작업을 수행하는 일련의 명령어 그룹

스칼라의 함수는 일급값이여서 함수를 인수로 전달하거나 결과로 반환하거나 변수에 저장할 수 있다

스칼라도 익명함수를 지원

스칼라에서도 커링을 지원하여 여러 인수를 받는 함수를 인수 일부를 받는 여러 함수로 분할하는 것이 가능

클래스와 트레이트

스칼라의 클래스와 인터페이스는 자바에 비해 더 유연함을 제공

getter, setter가 암시적으로 생성되어 코드가 간결해짐

스칼라 트레이트와 자바 인터페이스

스칼라의 트레이트는 자바의 인터페이스를 대체

트레이트로 추상 메서드와 기본 구현을 가진 메서드 두 가지를 모두 정의 가능

다중 상속을 지원

profile
Keep going하는 개발자

0개의 댓글