본문 바로가기

Dev.FrontEnd/JavaScript

3-1. 자바스크립트의 함수(Function) / 함수의 역할과 함수 모델링

Chapter 3-1. 자바스크립트의 함수 / 역할, 모델링
함수(Function)
함수는 자바스크립트를 이해하는데 핵심이 되는 컴포넌트다.
자바스크립트의 함수와 메소드는 전혀 다른 개념이다.
자바스크립트 함수는 메소드 역할을 할 수 있지만
객체지향 프로그래밍의 메소드는 자바스크립트의 함수 역할을 할 수가 없다.
code>
1
2
3
4
function add(x, y) {
    var total = x + y;
    return total;
}
cs

함수의 역할 세 가지는 다음과 같다.
역할1. 호출 가능한 루틴으로서의 함수
실행코드를 갖고 있으면서도, 일반 객체처럼 멤버를 가질 수도 있다.

역할2. 값으로서의 함수(인자로 전달 가능, 변수에 할당 가능, 다른 함수의 반환값으로 사용가능)
함수를 변수에 담을 수 있다.

역할3. 다른 인스턴스를 생성할 수 있는 요소, 객체 타입으로서의 함수
new와 함께 사용되어 다른 객체를 생성할 수 있는 점에서 클래스와 유사한 역할이라고 이해할 수 있다. 




함수 모델링


간단한 함수 하나를 정의하는데도 이렇게 구조를 모델링하기가 복잡하다.

복잡한 이유는 위에서 말한 함수의 역할 3가지를 모두 수행해야하기 때문이다.


변수 스코프
함수가 메모리에 정의되면 기본적으로 호출가능한 코드블록( return x+y )이 정의된다.
변수 스코프는 함수를 정의할 때 사용된 변수가 정의되는 영역이다.(-x, -y)
사용된 변수는 외부에서 접근할 수 없는 변수 즉, 지역 변수(local variable)를 의미한다.

변수 스코프에는 지역변수 말고도 +prototype이라는 특별한 변수가 함께 정의된다.
이 변수는 내부, 외부에서 모두 접근 가능하다.( + 표시)
다른 객체를 가리키는 참조 변수로서 가리키는 대상은 메모리에 정의된 함수 전용 프로토타입 객체이다.


실행 코드 블록 영역
prototype을 제외하고 변수 스코프에 정의된 비공개 변수(지역 변수)는 외부에서 접근할 수 없다.
비공개 변수는 실행 코드 블록에 있는 내부코드를 통해서만 접근할 수 있다.


공개 변수 영역
동적으로 추가되는 멤버는 함수를 정의할 때
정의되는 변수 스코프와는 다른 영역에 정의되는데,
그 영역이 이 공개 변수 영역이다.
자바스크립트 객체의 멤버는 언제든지 추가, 제거, 대체될 수 있기 때문에,
함수도 객체로서 멤버가 동적으로 추가될 수 있다.


프로토타입 객체
함수를 정의하면 모든 함수에는 프로토타입 객체라는 것이 함께 정의된다.





#포스팅 내용은 황인균 님의 자바스크립트 객체지향 프로그래밍 이라는 책의 내용을 기반으로 작성되었습니다.
Chapter 3-1. 끝