본문 바로가기

Scala

(12)
[02]스칼라로 함수형 프로그래밍 시작하기 - 스칼라로 배우는 함수형 프로그래밍 2020/09/05 - [Programming Project/스칼라로 배우는 함수형 프로그래밍 정리] - [01]함수형 프로그래밍이란 무엇인가? - 스칼라로 배우는 함수형 프로그래밍 에서 이어지는 글입니다. 이 글은 스칼라로 배우는 함수형 프로그래밍을 읽고 정리한 글입니다. - 이번 글에서는 꼬리 재귀 함수(tail recursion function)를 이용해서 루프를 작성하는 방법을 알아 보며, 고차 함수(high-order-function)에 대해서도 알아본다. 고차 함수는 다른 함수를 인수로 받는 함수인데, 계산의 결과를 함수로 리턴 할 수도 있다. 또한 다형적(polymorphic) 고차 함수의 예도 몇 가지 소개한다. 2.1 스칼라 언어의 소개. 다음은 이번 장에서 자세히 살펴볼, 스칼라로 작성..
[01]함수형 프로그래밍이란 무엇인가? - 스칼라로 배우는 함수형 프로그래밍 스칼라로 배우는 함수형 프로그래밍을 읽고 정리한 글입니다. - 함수형 프로그래밍은 오직 순수 함수(pure function)들로만, 다시 말해서 부수 효과(side effect)가 없는 함수들로만 구축한다는 것이다. side effect가 없는 함수란, 어떤 값을 return하는 것 외에 다른 행위들(변수를 수정하거나, 오류를 내면서 실행을 중단하거나, 파일에서 무엇인가를 읽거나 수정하거나, 화면에 print를 한다거나..)을 발생시키지 않는 함수를 말한다. 이렇게 순수 함수들로만 프로그래밍을 하게 되면 모듈성(modularity)이 증가하여 훨씬 이로운 점들이 많이 생긴다. 모듈성 덕분에 순수 함수는 test, 재사용, 병렬화, 일반화, 분석이 쉬워진다. 또한, 버그가 생길 여지가 적다. 이 글에서는 ..
Lecture 2.1 - Higher-Order Functions (Functional Programming Principles in Scala / Coursera 강의 정리) 이 글에서는 functional programming에서 중요한 개념을 다른다. High order(고차) 함수는 함수를 인수로 전달하거나 결과로 반환할 수 있다. 함수형 언어에 대한 한가지 특별한 점은 함수형 언어는 함수를 1급 객체로 여긴다는 것이다. 이 말은, 다른 값 처럼 함수는 파라미터로 넘겨질 수 있고, result로 반환될 수도 있다는 말이다. 이것을 통해 프로그램을 작성할 수 있는 유연한 방법이 제공된다. 함수를 매개 변수로 가져오는 함수 또는 반환하는 함수는 고차 함수(high order function)라고 불린다. 이는 일차 함수(first order function)과 반대되는 말이다. 예시를 보자. a와 b 사이의 모든 정수를 합한다고 가정하자. sumInts는 범위를 입력으로 받..
Lecture 1.7 - Tail Recursion (Functional Programming Principles in Scala / Coursera 강의 정리) 지난번엔, 함수가 프로그램을 구성하는 기본적인 블록이라는것을 알게 되었다. 이번 글에서도 여전히 함수에 대해서 다뤄볼 것이다. 몇몇 방법을 통해 함수들을 구성하고, 합성하는 방법에 대해 알아보며, 마지막으로 다음 글에서 데이터와 객체에 대해 알아본다. 이번에는 재귀를 다시 살펴본다. 재귀를 표현하는 여러 방법이 있다는 것을 알게 될 것이다. 리뷰 할 겸 함수 application을 살펴보자. f(e1,...en)을 계산할 때에 있어서 다음의 규칙을 따른다. - e1~en을 먼저 계산한다. - 함수 f의 body로 application 부분을 대체한다. - 파라미터 v1,...,vn을 f의 파라미터로 바꾼다. 이것은 프로그램 자체를 다시 작성하는 것으로 형식화 될 수 있다. f(x1 , ... , xn)의..
Lecture 1.6(1-5 포함) - Blocks and Lexical Scope (Functional Programming Principles in Scala / Coursera 강의 정리) 1-5 강의는 실습 강의라서 간단하게 내용만 정리하여 대체하도록 하겠다. 요걸 만들려고 한다. 이를 구현하기 위해 위와 같은 방법을 사용하도록 한다. 이는 guess * guess = x가 되어야 하는 상황에서 guess = x / guess로 이항 한 후 현재 guess와 평균을 내어 근사화 시키는 과정이다. 요걸 만들어 놓고 요걸 실행하면 근사값을 구하게 된다. 그치만 sqrt에 너무 큰 수를 넣으면 너무 오랜 시간이 걸리게 된다. (원하는 정확도가 실질적인 수의 크기에 비해 너무 정밀하기 때문에) 그래서 1e50같은 수를 넣으면 너무 오래 걸려서 평가 지표를 아래와 같이 바꾼다. 이러면 수의 크기에 따라 대략적인 정밀도를 구하게 된다. ----이게 1.5 lecture전부--- 위의 프로그램들은 작..
Lecture 1.1 - Programming Paradigms (Functional Programming Principles in Scala / Coursera 강의 정리) https://www.coursera.org/learn/progfun1/home/welcome 너무 조하요 강의 짱짱! 함수형 프로그래밍의 패러다임을 공부 할 것. 완전 새로운것이다 (!!!! NEW !!!!) 패러다임의 의미를 살펴보면, 과학에서의 패러다임은 독립적인 개념이나 과학적 원리의 사고 패턴을 의미한다. 프로그래밍에서는 크게 세가지의 프로그래밍 패러다임이 있다. 우선 imperative programming (명령형 프로그래밍)이다. (Java , C 등이 여기에 해당한다) 그리고 functional programming이 있으며 (우리가 이제 배울 것) 잘 알려지지는 않았지만 logic programming이 있다. 객채지향 프로그래밍이 새로운 패러다임이라고 말하는 사람도 있지만, 교수님 생..
Scala Future에 대해 기본은 배워보자! 튜토리얼 ~~ 본 글은 http://allaboutscala.com/tutorials/chapter-9-beginner-tutorial-using-scala-futures/ 의 글을 번역(그렇지만 전부 하지는 않고 필요한 부분만)한 것임을 먼저 알립니다! Introduction. Official Scala Future에 대한 문서는 여기서 보시면 됩니다. Scala Future에 대해 짧은 코드 스니펫과 함께 Scala Future을 통한 asynchronous non-blocking operations에 익숙해질 수 있게 도와주겠다. 충성충성^^7. Scala에 대한 기본적인 이해가 있는 독자를 대상으로 하며, 일단은 Future은 일종의 code wrapper이라고 간략하게 알면 된다. Method with fut..
Scala의 모나드(Monad)에 대한 정리 들어가기에 앞서, 혹시 모를 수 있는 용어정리 더보기 Generic : 다양한 메소드를 사용할 때 클래스를 사용해 객체를 인스턴스화 할 때 필요한 Type을 지정해줄 수 있도록 프로그래밍하는 문법이다. 아래와 같은 예시가 있곘다. class GenericStack { stack: T[]; constructor() { this.stack = []; } addItem(item: T): void { this.stack.push(item); } toString(): string { return this.stack.join(', '); } get(index?: number): any { return index ? this.stack[index] : this.stack; } } const stringStack = ..