여니의 프로그래밍 study/JavaScript

2-4 변수와 상수, 함수형 프로그래밍 (Javascript)

여니's 2021. 3. 8. 21:37

 

변수 Variable

: 데이터를 저장할 때 쓰이는 '이름이 붙은 저장소'

 

자바 스크립트에서는 let 키워드를 이용해서

변수를 생성한다.

 

let apple;

apple='Hello'

(let apple='Hello')

>> 문자열 'Hello'를 변수 apple에 저장한다.

 

let apple='Hello',age=25,message='World!'

>> 이런식으로 한 줄에 입력할 수도 있지만, 가독성 떨어짐

 

var

: let과 거의 동일하게 동작함

let의 구버전이라고 할 수 있음

 


함수형 프로그래밍

: 불변성을 지향하는 프로그래밍 언어 패러다임으로,

변경 가능한 상태를 최대한 제거하기 위해 노력하는 언어이다.

순수 함수를 지향한다.

순수함수를 통해 부수 효과를 줄이면서 프로그래밍 하는 것을 의미함

스칼라와 얼랭은 대표적인 함수형 언어이다.

 

어떻게 하면 더 간결하면서도 안전한 프로그램을 만들 수 있을까?에 대한

질문 속에서 비롯되었다.

 

ex) Javascript, python


- 함수형 프로그래밍 특징

1. 불변성 (Immutable)

: 메모리에 이미 담긴 상태(어떤 값의 상태)를 변경하지 않는다.

상태의 변경은 부수 효과를 일으키기 때문에, 이를 지원하지 않는다.

 

-> 부수효과..?

- 부수효과 (Side effect)

: 함수 내의 실행으로 인해서 함수 외부가 영향을 받는다는 것을 의미한다.

순수하지 않은 함수는 부수 효과 등을 일으키는 함수이다.

함수 내에서 외부값을 변경한다거나, 

예외처리가 발생한다거나,

가변객체의 파라미터나 값을 변경시키는 것과 같은 현상들

 

 

2. 참조 투명성 (Referential Transparency)

: 함수가 함수 외부의 영향을 받지 않는 것을 의미한다.

이게 무슨 의미일까?

함수 외부와는 완전히 독립적이게 코드를 작성한다는 의미일까?

 

좀 더 자세하게 알아보면

모든 프로그램에 대해 어떤 표현식을

모두 그 표현식의 결과로 치환해도

아무런 영향이 없이 결과가 똑같이 나온다면,

그 표현식은 참조에 투명하다고 할 수 있다.

모든 입력값에 대해 참조에 대해 투명하면, 그 함수는 순수하다고 할 수 있다.

 

 

 

3. 일급 함수 (First- class Function)

 

- 일급 객체

: 변수나 데이터 구조 안에 담을 수 있다.

함수에 인수로 전달이 가능하다

리턴값으로 사용될 수 있다.

>> 일급객체는 이 특징들을 모두 충족하는 객체를 의미한다.

 

1. 함수를 객체에 할당할 수 있다.

def fruit(n):

~~~

apple=fruit

apple(3)

>> 이런식으로

 

2. 함수를 매개변수로 전달할 수 있다.

def add(a,b):

~~~~

 

def sum(func,n1,n2):

~~

 

sum(add,1,2)

 

3. 함수를 리턴값으로 전달할 수 있다.

>> 이 부분은 클로저 개념을 알고 있어야 함

 ※ 추가적인 조사 필요

 

4. 게으른 평가 (Lazy Evaluation)

: 어떤 코드 조각을 실행할 때 그때그때 값을 평가하지 않고,

정말 결과값이 필요한 시점까지 평가를 늦추는 것을 의미한다.

 

 ※ 추가적인 조사 필요


 

순수 함수

 

: 같은 입력에 대해서는 항상 같은 출력이 보장되는 함수이다.

리턴 값이 항상 일정하더라도 외부의 상태를 변경하는 코드가 있으면,

순수 함수가 아니다.

 

function apple(a,b){

return a+b

}

>> 동일한 인자 값에 대해 항상 같은 리턴값을 돌려주니까 apple은 순수 함수

 

let c=20;

function apple(a,b){

return a+c

}

>> c라는 변수의 값이 변하면 return 값도 변경되니까 이건 순수 함수가 아니다.

 

 


상수

변화하지 않는 변수를 선언할 땐 const를 사용한다.

값이 변경되는 것을 방지하면서,

다른 개발자들에게 이 변수는 상수다라는 것을 알리기 위해

const 를 사용한다.

 

- 대문자 상수

: 기억하기 힘든 값을 변수에 할당해 별칭으로 사용하는 것은 널리 사용되는 관습이다.

대문자와 밑줄로 구성된 이름으로 명명한다.

https://ko.javascript.info/variables

>> 대문자 상수는 하드코딩한 값의 별칭을 만들 때 사용하면 된다.


변수와 상수의 차이점

상수는 메모리에 할당되지 않기 때문에 값을 바꿀 수가 없다.

하지만 변수는 메모리의 한 부분을 변수의 크기만큼 할당 받아서 그 공간에 값을 저장한다.