본문 바로가기

Development/Programming

Side Effect가 있는 함수 1. 변수를 수정한다.2. 자료구조를 제자리에서 수정한다.3. 객체의 필드를 설정한다.4. 예외(exception)를 던지거나 오류를 내면서 실행을 중단한다.5. 콘솔에 출력하거나 사용자의 입력을 받아들인다.6. 파일에 기록하거나 파일에서 읽어들인다.7. 화면에 그린다. 더보기
[링크] Promise에 관한 글.. http://programmingsummaries.tistory.com/325 더보기
[Scala] Currying 간단하게 설명하면 여러 개의 인자를 받는 함수에 일부 인자값을 넣어서 다시 함수로 만드는 것이다. (참고사이트) object CurryTest extends App { def filter(xs: List[Int], p: Int => Boolean): List[Int] = if (xs.isEmpty) xs else if (p(xs.head)) xs.head :: filter(xs.tail, p) else filter(xs.tail, p) def modN(n: Int)(x: Int) = ((x % n) == 0) val nums = List(1, 2, 3, 4, 5, 6, 7, 8) println(filter(nums, modN(2))) println(filter(nums, modN(3)))} modN의 함.. 더보기
[Scala] Generic function 제네릭과 함수를 같이 사용하는 예제이다. def test [T](text:T) (block:(T) => String): Result = { val resultStr = block(text) Ok(Json.obj("result" -> "SUCCESS","object" -> resultStr)) } 함수 사용하기test("aaaaa") { inputText => "bbbbbbb" } 더보기
[Scala] Local Type Inference 스칼라는 Java랑 다르게 알아서 타입을 추론이 가능하다~!!!! 하지만 막무가내로 되는게 아니라 조금은 안정하게??설계를 한듯하다. 하나씩 예시를 살펴보자~! 첫번째 예시는 코드로 파악이 가능하다. object InferenceTest1 extends App { val x = 1 + 2 * 3 // the type of x is Int val y = x.toString() // the type of y is String def succ(x: Int) = x + 1 // method succ returns Int values} 두번째 예시는 함수에 리턴타입을 정의하지 않았다. 그리고 재귀호출이라서 컴파일에서 오류를 발생시킨다. object InferenceTest2 { def fac(n: Int) = i.. 더보기
[Scala] Explicitly Typed Self References 자기 자신을 다른 Type으로 선언이 가능하다. 예시를 보자 Graph라는 클래스와 abstract class Graph { type Edge type Node def connectWith(node: Node): Edge = { val edge = newEdge(this, node) // now legal edges = edge :: edges edge } } ...} 더보기
[Scala] Lower Type Bounds 아래의 예시를 보면 LinkedList를 구현하였다. 하지만 ListNode[String]이라고 선언하면 ListNode[Object]를 사용할 수 없게 되는 상황이 나온다. case class ListNode[T](h: T, t: ListNode[T]) { def head: T = h def tail: ListNode[T] = t def prepend(elem: T): ListNode[T] = ListNode(elem, this)} 조금 더 규칙을 허술하게 하고 싶을때 ?? 사용하면 좋다. prepend 함수에 [U >: T] 라고 해주면 case class ListNode[+T](h: T, t: ListNode[T]) { def head: T = h def tail: ListNode[T] = t de.. 더보기
[Scala] Upper Type Bounds 스칼라는 추상타입의 경계를 조정? 이 가능하다. 예시로 보자 아래의 코드를 보면 T 더보기
[Scala] Traits 스칼라에서는 JAVA에서 interface와 비슷한 Traits가 있다. 하지만 구현이 가능한 것이 약간 다르다. trait Similarity { def isSimilar(x: Any): Boolean def isNotSimilar(x: Any): Boolean = !isSimilar(x)} 이렇게 trait을 선언하고 아래와 같이 사용해 보자 class Point(xc: Int, yc: Int) extends Similarity { var x: Int = xc var y: Int = yc def isSimilar(obj: Any) = obj.isInstanceOf[Point] && obj.asInstanceOf[Point].x == x&& obj.asInstanceOf[Point].y == y}obj.. 더보기
[Scala] Polymorphic Methods 스칼라에서는 다형성 메소드를 지원한다. 아주 간단하게 사용 할 수 있다. 아래의 예시 코드를 보자 object PolyTest extends App { def dup[T](x: T, n: Int): List[T] = if (n == 0) Nil else x :: dup(x, n - 1) println(dup[Int](3, 4)) println(dup("three", 3))} dup라는 함수가 있고 [T]로 선언이 되어지게 되면 다형성이 적용이 된다. 출력 결과는 다음과 같다.List(3, 3, 3, 3)List(three, three, three) 더보기