본문 바로가기

반응형

Language/Scala

(7)
[Scala] State 6.1 부수 효과를 이용한 난수 발생 scala에서 제공하는 부수 효과에 의존하는 상당히 전형적인 imperative API 인 scala.util.Random를 이용하여 난수를 생성할 수 있다. scala.util.Random 안에서 일어나는 일을 알지 못해도 난수 발생기 객체 rng는 다른 랜덤 값을 생성하여 돌려주기 위해, 그 내부에 메서드 호출 때마다 갱신되는 내부 상태가 존재함을 가정할 수 있다. 상태 갱신은 부수효과로서 수행되므로 참조 투병하지 않다. 이러한 참조 투명하지 않은 함수는 검사, 합성, 모듈화가 어렵고, 쉽게 병렬화할 수 없다. - 검사 무작위성을 활용하는 메서드를 작성할 때에는 그런 메서드의 재현성을 검사할 필요가 있다. 주사위를 흉내 내는 다음 메서드는 반드시 1 이상 6 이하..
[Scala] Data Structures 3.1 함수적 자료구조의 정의 순수함수는 자료를 변경하거나, 기타 부수 효과를 수행하는 일이 없어야함. 따라서 함수적 자료구조는 정의에 의해 불변이 ( Immutable ) 이다. 자료구조의 조작시 기존의 변수를 수정하는 것이 아닌, 새로운 변수를 생성. 그렇다면, 여분의 복사가 많이 일어나지 않을까? 답은 "그렇지 않다" trait 하나의 추상 인터페이스로, 필요하다면 메서드의 구현을 담을 수 있다. sealed 모든 메서드가 이 파일 안에 선언되어 있어야 함을 뜻함 (abstract class를 사용해도 된다) case list의 두가지 구현, 즉 두가지 자료 생성자 이들은 list가 취할 수 있는 두 가지 형태를 나타낸다. 공변과 불변에 대해 trait List[+A] 선언에서 형식 매개변수 A 앞..
[Scala] Functional data structures 3.1 함수적 자료구조의 정의 예를 들어 순수 함수 +에서, 3 + 4을 수행했을 때 3이나 4의 값이 변경되는 일 없이 새로운 값 7이 생성된다. 함수적 자료구조로 정의된 List에 새로운 항목을 추가해도 기존 List가 변경되지는 않는다. package fpinscala.datastructures sealed trait List[+A] // A 타입 List case object Nil extends List[Nothing] // empty list 생성자 case class Cons[+A](head: A, tail: List[A]) extends List[A] // nonempty lists를 나타내는 또 다른 생성자. // tail은 또 다른 List[A]로 Nil일 수도 Cons일 수도 있다. ..
[Scala] Getting started with functional programming in scala 2.1 스칼라 언어의 소개: 예제 하나 private def formabAbs(x: Int) = { val msg = "The absolute value of %d is %d." msg.format(x, abs(x)) } private def formatFactorial(n: Int) = { val msg = "The factorial of %d is %d." msg.format(n, factorial(n)) } // 꼬리 재귀가 아닌 예: stack-overflow 위험이 있다. def factorial(n: Int): Int = { if (n Boolean): Int = { @annotation.tailrec def loop(n: Int): Int = if (n >= as.length) -1 else..
[Scala] FP의 두 가지 개념 FP의 중요한 첫 번째 개념 Immutability (불변성) 한 번 만들어진 객체는 변하지 않는 것 (final 객체) 1. 참조 불변성: 변수에 할당 된 값이 변하지 않는 것 2. 객체 불변성: 한 번 생성된 객체는 변하지 않는 것 var(mutable 변수) 보다는 val(immutable 변수)을 사용 collection.mutable 보다는 collection.immutable을 사용하도록 참조 투명성 (referential transparency) 을 유지하기 위해서는 Immutability (불변성)이 꼭 필요하다. (객체에 대한 부수효과(side effect)를 내기 힘들기 때문) FP의 중요한 두 번째 개념 referential transparency (참조 투명성) 프로그램의 다른 동작..
[Scala] What is functional programming? 예제 소스 https://github.com/fpinscala/fpinscala FE 란? - functional programming, - 전제: 순수 함수 (pure function) 즉, 부수 효과 (side effect) 가 없는 함수들로만 구축. 부수 효과(side effect) 란? - 그냥 결과를 돌려주는 것 이외의 어떤 일을 말한다. 부수 효과 (side effect) 의 몇 가지 예 변수를 수정한다. 자료구조를 제자리에서 수정한다. 객체의 필드를 설정한다. 예외(exception)를 던지거나 오류를 내면서 실행을 중단한다. 콘솔에 출력하거나 사용자의 입력을 읽어들인다. 파일에 기록하거나 파일에서 읽어들인다. 화면에 그린다. 위와 같은 일들을 전혀 수행할 수 없거나 수행할 수 있는 때와 장..
ex 보호되어 있는 글입니다.

반응형