※스칼라로 배우는 함수형 프로그래밍(폴 키우사노, 루나르 비아르드나손) 책 공부내용 정리



* 순수 함수란?

: 부수 효과(side effect)가 없는 함수.

수학에서 함수를 f(x)=ax+b 등 로 표현하는 것처럼 똑같은 입력 값에 대해 항상 같은 값을 돌려주는 것 외에 다른 기능(변수 값을 갱신한다던지, 자료 구조를 변경한다던지)은 하지 않아야 한다. 

이런 개념을 참조 투명성(referential transparency, RT)라는 개념으로 설명할 수 있다.


* 참조 투명성(referential transparency, RT)

: 모든 프로그램에 대해 어떤 표현식(expression) e를 모두 그 표현식의 결과로 치환해도 프로그램에 아무 영향이 없다면 그 표현식 e는 참조에 투명하다(referentially transparent). 만약 어떤 함수 f(x)가모든 입력값 x에 대해 참조에 투명하면 그 함수 f는 순수하다.




참조에 투명한 예제)

> val x = "Hello"

> val r1 = x + " World"

> val r2 = "Hello" + " World"

> val r3 = x + " World"


위 문장을 순서대로 수행한다고 생각하자. x를 "Hello"를 리턴하는 함수라고 생각하면, r1, r2, r3 모두 그 결과값은 같다. 즉 함수 x를 그 함수의 리턴 값인 "Hello" 치환해도 프로그램에 문제가 없다.



참조에 투명하지 않은 예제)

> val x = new StringBuilder("Hello")

> val r1 = x.append(" World").toString

> val r2 = x.append(" World"),toString


역시 위 문장을 순서대로 수행한다고 생각하자. 함수 x의 리턴값은 new StringBuilder("Hello")이고 r1을 수행하면 결과값은 "Hello World"이다. 


그런데 r2를 수행하면?

r1을 수행한 상태에서 함수 x의 상태값(?)은 변경되었으므로 r2의 수행결과는 "Hello World World"이다. x의 리턴값을 new StringBuilder("Hello")라고 한다면 r2에서 x를 이 값으로 치환했을 때 그 결과는 "Hello World"이므로 두 수행 결과는 다르다.


또한 함수는 같은 입력에 대해 항상 같은 값을 반환해야 하고, 함수를 그 함수의 결과값으로 치환해도 프로그램에 영향이 없어야 한다고 했는데  r1, r2에서 함수 x에 대해 각각 똑같은 입력 append(" World") 을 수행했지만 그 결과값은 서로 다르므로 x는 순수 함수가 아니다.






(아.......배운 내용 포스팅하는 거 되게 귀찮은 일이었구나...하지말까....블로거 분들 존경합니다ㅠㅠ)

'잡동 > etc' 카테고리의 다른 글

SOAP와 REST 간단한 개념정리  (0) 2016.07.06

일단은 이게 무엇이구나~ 라는 정도로만 이해하기 위해 간략하게 작성.

하지만 내가 써놓은 것이 맞는지, 제대로 이해한 것이 맞는지 모르겠다. 역시 직접 써봐야 알 수 있을 것 같다.




SOAP (Simple Object Access Protocol)

XML 형식의 구조화된 데이터를 분산 환경에서 교환할 수 있도록 하는 가벼운 프로토콜. HTTP를 주로 사용하는 듯 하며 다른 프로토콜도 사용 가능. SOAP에는 여러가지 메시지 패턴이 있지만 보통은 RPC 패턴을 사용(사용한다고 표현하는 게 맞는 건가?). 클라이언트가 서버에 메시지를 요청하면 서버는 즉시 메시지를 응답한다.

그렇다면 RPC란?



RPC (Remote Procedure Call)

별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에 있는 함수나 프로시저를 실행할 수 있게 하는 프로세스간 통신 기술. 즉 RPC를 이용하면 사용자는 어떤 프로그램에 대하여 그 프로그램이 로컬에 있건 원격에 있건 사용할 수 있다.



REST (REpresentational State Transfer)

HTTP위에서, SOAP나 쿠키를 통한 세션 트래킹 같은 별도의 전송 계층 없이, 웹 상의 자료를 전송하기 위한 간단한 인터페이스. 웹 상의 자료를 HTTP URI를 통해 표시하고 HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자료에 대한 CRUD(create, read, update, delete) 작업을 수행한다.

REST 원리를 따르는 시스템을 RESTful 이라고 한다.




참고자료

https://ko.wikipedia.org/wiki/SOAP

https://www.w3.org/TR/soap12/

http://www.slideshare.net/WonchangSong1/rpc-restsimpleintro

https://ko.wikipedia.org/wiki/REST

http://regularmotion.kr/rest-and-restful/


'잡동 > etc' 카테고리의 다른 글

[함수형 프로그래밍] 순수 함수, 참조 투명성  (0) 2016.08.07

+ Recent posts