-
챕터[20] OOP와 FP의 조화 : 자바와 스칼라 비교모던자바인액션 2020. 10. 22. 01:29
서론
스칼라란?
자바와 스칼라 관계
클래스와 트레이트
스칼라란?
-
스칼라는 객체지향과 함수형 프로그래밍의 혼합한 언어이며, JVM에서 동작하기에 자바의 클래스를 사용할 수 있으며 마찬가지로 자바에서 라이브러리 추가만으로 스칼라 코드를 호출하여 사용할 수 있다.
-
스칼라에서의 모든 데이터 타입은 객체로 취급한다.
-
스칼라에서의 변수는 일반 선언 var과 상수 선언인 val이 존재한다.
스칼라 사용하기
-
문자열 보간법
-
컬렉션 사용
import scala.io.Source class ScalaExam { object Beer { def main(arg : Array[String]): Unit = { var n : Int = 2; while( n <= 6) { println(s"Hello ${n} bottles of beer") n += 1 } // 2 ~ 6 foreach (n) 2 to 6 foreach { n => println(s"Hello ${n} bottles of beer")} // Map<String, Int> val authorsToAge = Map("Raoul" -> 23, "Mario" -> 40, "Alan" -> 53); // List<String> val authors = List("Raoul", "InWoo", "Alan") // Set<Int> val numbers = Set(1, 2, 3, 4) // numbers 요소와 9 요소를 포함한 새로운 Set 생성 val newNumbers = numbers + 9 // filter : 길이가 10 이상인 행만 가져온 뒤 // Map : 대문자로 변경한다. val fileLines = Source.fromFile("data.txt").getLines().toList val linesLongUpper = fileLines.filter(l => l.length() > 10) .map(l => l.toUpperCase()) // 병렬 비슷하게 parallel In Scala // val linesLongUpper2 = fileLines.par filter (_.length() > 10) map(_.toUpperCase()) // option == java.optional /* def getCarInsuranceName(person: Option[person], minAge: Int) = person.filter(_.getAge() >= minAge) .flatMap(_.getCar) .flatMap(_.getInsurance) .map(_.getName) .getOrElse("Unknown") */ } } }
함수
스칼라의 함수는 어떤 작업을 수행하는 일련의 명령어 그룹이다. 명령어 그룹을 쉽게 추상화 할 수 있는 것도 함수 덕분이며 동시에 함수는 함수형 프로그래밍의 중요한 기초석이다.
-
함수 형식 : 함수 형식은 3장에서 설명한 자바 함수 디스크립터의 개념을 표현하는 편의문법(함수형 인터페이스에 선언된 추상 메서드의 시그니처를 표현하는 개념)
-
익명 함수 : 자바의 람다 표현식과 달리 비지역 변수 기록에 제한을 받지 않는다.
-
커링 지원 : 여러 인수를 받는 함수를 일부 인수를 받는 여러 함수로 분리하는 기법
스칼라
-
익명함수 지원
- 일급 함수
-
스칼라의 함수는 일급값이기에 String, Integer 처럼 함수를 인수로 전달하거나, 결과로 반환하며 변수에 저장할 수 있다.
-
-
클로저
-
자바의 람다에서 사용하는 변수는 상수처리 혹은 그렇게 준하여 사용해야 하지만 scala 에서는 상관없이 사용가능
-
-
커링 지원
-
게터, 세터, 생성자 암시적으로 생성
-
트레이트
-
자바의 인터페이스이며 디폴트 메서드 사용가능
-
class 뿐만 아니라 객체 인스턴스화 과정에서도 조합가능
-
'모던자바인액션' 카테고리의 다른 글
챕터[21] 결론 그리고 자바의 미래 (0) 2020.10.29 챕터[18] 함수형 관점으로 생각하기 (0) 2020.10.22 챕터[17] 리엑티브 프로그래밍 (0) 2020.10.22 챕터[16] 안정적 비동기 프로그래밍 (0) 2020.10.21 챕터[15] CompletableFuture와 리액티브 프로그래밍 컨셉의 기초 (0) 2020.10.21 -