일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- spark
- intellij
- hadoop
- Hbase
- docker
- Spring
- 엘라스틱서치
- Java
- Spring XD
- 도메인주도설계
- scala
- DDD
- 인텔리J
- Gradle
- apache storm
- Clean Code
- elastic search
- 스프링 배치
- Angular2
- hdfs
- 제주
- SBT
- design pattern
- Spring Boot
- elasticsearch
- hibernate
- Spring Batch
- Storm
- Linux
- nginx
- Today
- Total
목록전체 글 (310)
욱'S 노트
스칼라는 NESTED 함수 정의를 지원한다. 다음은 입력된 ArrayBuffer에서 특정값을 필터링하는 예제이다.import scala.collection.mutable.ArrayBuffer object NestedFunctionTest extends App { def filter(list : ArrayBuffer[Int], filterValue : Int) = { def filterInternal(list : ArrayBuffer[Int]) = { val results = ArrayBuffer[Int]() list.foreach(i => if (i != filterValue) results += i) results } filterInternal(list) } println(filter(ArrayBuff..
스칼라에서는 고차함수 정의를 지원한다. 함수는 다른 함수를 파라미터로 전달받고 그것을 활용할 수 있다. 고차함수를 사용하는 예제는 다음과 같다.(f1 : (Int, Int) => Int, x : Int, y : Int, z : Int) => f1(x, y) * z해당 함수는 함수를 인자로 받고 함수의 결과에 곱하기를 하는 함수이다. 다음은 실제 사용예이다.object HighOrderFunctionTest extends App { val plus = (x : Int, y : Int) => x + y val minus = (x : Int, y : Int) => x - y val multiply = (f1 : (Int, Int) => Int, x : Int, y : Int, z : Int) => f1(x, ..
스칼라에서 익명함수를 정의하는 방법은 매우 간단하다. 아래는 가장 간편하게 정의한 예이다. 왼쪽부분은 파라미터를 정의한 부분이고 오른쪽 부분의 수식을 정의한 부분이다.(x: Int) => x + 1위의 익명함수는 사실 아래와 같은 정의를 단순한 한 것이다.new Function1[Int,Int] { override def apply(x: Int): Int = x + 1 }다수의 파라미터의 경우는 아래와 같이 정의한다.(x: Int, y:Int) => x + y파라미터가 없는 경우는 다음과 같다.() => System.getProperty("user.dir")위의 각 함수들을 테스트하면 아래와 같이 수행할 수 있다.object FunctionTest extends App { val plusOne = (x:..
단일 상속만을 지원하는 언어들과는 다르게 스칼라는 클래스를 재사용을 위한 다른 개념을 가지고 있다. 새로운 클래스 정의내에 클래스의 정의를 새로운 멤버 정의로 재활용할 수 있다. 이것을 믹스인-클래스 컴포지션이라고 한다.abstract class AbsIterator { type T def hasNext : Boolean def next : T }다음으로는 AbsIterator를 상속한 믹스인 클래스를 고려해보자. 클래스를 믹스인으로 사용될 수 있게 정의하기 위해서 trait 키워드를 활용한다. trait RichIterator extends AbsIterator { def foreach(f : T => Unit) = { while (hasNext) f(next) } }다음은 String의 각 캐릭터를 ..
트래잇은 자바에서의 인터페이스와 유사하다. 트래잇은 지원해야하는 메소드 시그니처를 명시한다. 자바 8에서처럼 스칼라는 부분적인 구현을 지원한다. 몇몇의 메소드의 기본 구현을 제공할 수 있다는 것을 의미한다. 클래스와는 반대로 생성자 파라미터를 가질 수 없다.trait Similarity { def isSimilar(x : Any) : Boolean def isNotSimilar(x : Any) : Boolean = !isSimilar(x) }두개의 메소드를 가지고 있다. isSimilar는 구현을 제공하지 않고 있지만 isNotSimilar는 구현을 제공한다. 결과적으로 이 트래잇과 결합하는 클래스는 isSimilar에 대한 구현만 하면 된다. 트래잇은 일반적으로 mixin 클래스 컴포지션으로 클래스와 ..