scala
-
[Scala]9-흐름 제어 추상화scala 2020. 11. 9. 00:21
P211 이렇게 함수를 인자로 받는 함수를 고차 함수 higher-order fuction 라 한다. 이러한 고차 함수는 코드를 간단하게 압축할 수 있는 더 많은 기회를 제공한다. FileMatcher v1 object FileMatcher { private def filesHere = (new java.io.File(".")).listFiles def filesEnding(query: String) = for (file 5 > 3) + "\n" ) 이름에 의한 호출 사용 var assertionsEnabled = true def byNameAssert(predicate: => Boolean) = if (assertionsEnabled && !predicate) throw new AssertionErro..
-
[Scala]8-함수와 클로저scala 2020. 9. 24. 23:11
P190 지역 함수는 감싸고 있는 블록의 파라미터에 접근할 수 있기 때문에, 이럴 필요가 없다. 바깥쪽 processLine 함수의 파라미터를 그냥 사용할 수 있다. import scala.io.Source object LongLines { def processFile(filename: String, width: Int) { def processLine(line: String ) { if (line.length > width) println(filename +": "+ line.trim) } val source = Source.fromFile(filename) for (line var increase = (x: Int) => x + 1 increase: Int => Int = $$Lambda$1020/9..
-
[Scala]7-내장 제어 구문scala 2020. 9. 12. 16:17
P163 val을 사용할 기회를 노려보자. val은 코드를 더 가독성 높고 리팩토링하기 쉽게 해준다. P164 while과 do-while이 이루는 구조는 수행 결과가 특정 값이 아니기 때문에 표현식이라 하지 않고 '루프'라 부른다. 루프의 결과는 그 타입이 Unit 이다. Unit 타입에는 유니트 값 밖에 없고, 이 값을 빈 괄호 ()로 표기한다. ()라는 값이 존재한다는 점에서 자바의 void와 스칼라의 Unit는 다르다. P166 for 표현식 val filesHere = (new java.io.File(".")).listFiles def fileLines(file: java.io.File) = scala.io.Source.fromFile(file).getLines().toList def grep(..
-
[Scala]6-함수형 객체scala 2020. 9. 9. 21:54
P143 변경 불가 객체의 장단점 비교 장점 변경 불가능한 객체는 시간에 따라 변하는 상태 공간을 갖지 않기 때문에, 변경 가능 객체보다 추론이 쉬운 경우가 종종 있다. 변경 불가 객체는 전달을 비교적 자유롭게 할 수 있다. 상태를 갖는 변경 가능 객체의 경우, 코드의 다른 부분에 전달하기 전에 복사를 해놓는 등의 방어적인 조치가 필요하다. 두 스레드가 동시에 객체에 접근하는 경우라고 해도, 변경 불가 객체는 말 그대로 상태를 바꿀 수 없기에 상태를 망쳐놓는 일이 발생할 수 없다. 변경 불가 객체는 안전한 해시 테이블 키다. HashSet에 변경 가능 객체를 키로 설정했는데, 나중에 상태를 변경했다면 HashSet에서 해당 객체를 찾을 수 없는 경우가 발생한다. 단점 그 자리에서 바로 상태를 변경하면 간..
-
[Scala]5-기본 타입과 연산scala 2020. 3. 13. 14:04
기본적으로 자바와 동일 차이점 중심으로 정리 5.1 기본타입 값 타입 범위 Byte 8비트 2의 보수 표현을 사용하는 부호 있는 정수 Short 16비트 2의 보수 표현을 사용하는 부호 있는 정수 Int 32비트 2의 보수 표현을 사용하는 부호 있는 정수 Long 64비트 2의 보수 표현을 사용하는 부호 있는 정수 Char 16비트 부호 없는 유니코드 문자 String Char의 시퀀스 Float 32비트 IEEE 754 단정도(기본정밀도) 부동소수점 수 Double 64비트 IEEE 754 배정도(2배정밀도) 부동소수점 수 Boolean true 또는 false java.lang 패키지에 있는 String을 제외하면, 표 5.1에 있는 모든 타입은 scala패키지의 멤버다. 5.2 리터럴 표5.1에 쓴..
-
[Scala]4-클래스와 객체scala 2020. 3. 10. 16:27
P106> 스칼라에서 멤버를 공개(public)하려면 어떤 접근 수식자도 지정하지 않아야 한다. 다시 말해, 자바에서 'public'을 사용해야 하는 경우 스칼라에서는 아무것도 하지 않아야 한다. 스칼라의 기본 수준은 전체 공개다. 파라메터가 val인 이유는 val이 더 분석하기 쉽기 때문이다. 분석을 위해 val을 나중에 재할당해서 값이 바뀌는지 살펴볼 필요가 없다. 반면 var의 경우에는 이를 추적해야만 한다. P110> 세미콜론 추론 규칙 정확한 문장 분리 규칙은 그 규칙이 대부분의 경우 잘 작동하는 것에 비하면 놀랄 만큼 간단하다. 간단히 말해, 줄의 끝은 다움 세 가지 경우가 아니면 세미콜론과 똑같이 취급한다. 1. 어떤 줄이 어떤 명령을 끝낼 수 있는 단어로 끝나지 않는다. 즉 마침표(.)나 ..
-
[Scala]3-스칼라 두 번째 걸음scala 2020. 3. 10. 14:53
P82> 배열의 사용 val greetStrings: Array[String] = new Array[String](3) greetStrings(0) = "Hello" greetStrings(1) = ", " greetStrings(2) = "world!\n" for (i 리스트의 사용 val oneTwoThree = List(1,2,3) val oneTwoThree = 1 :: 2 :: 3 :: Nil 왜 리스트 뒤에 추가하지 않을까? List 클래스는 ":+" 라는 이름의 '추가' 메소드를 제공하기는 한다. 하지만 이 연산을 사용하는 경우는 드물다. 리스트 뒤에 원소를 추가하는 연산은 리스트의 길이에 비례한 시간이 걸리기 때문이다. 반면 ::를 사용해 맨 앞에 추가하는 것은 상수 시간이 걸린다. 리스트..
-
[Scala]2-스칼라 첫걸음scala 2020. 3. 10. 14:25
P70> 스칼라에는 두 종류의 변수가 있는데, 바로 val과 var이다. scala> val msg = "Hello, world!" scala> var greeting = "Hello, world!" scala> val msg = "Hello, world!" scala> var greeting = "Hello, world!" P71> 하지만 인터프리터 안에서는 앞에서 val로 이미 정의했던 것을 val을 사용해 다시 정의할 수 있다. P73> 함수 정의의 기본 형식 def max(x: Int, y: Int): Int= { if (x > y) x else y } P79> 함수 리터럴 (x: Int, y: Int) => x + y for 표현식 for (arg