티스토리 뷰

JavaScript

자바스크립트 패턴 - 함수

똑땅해 2017. 9. 24. 20:08

1. 함수 선언문과 표현식의 차이 : 호이스팅

함수 내에서 foo와 bar를 정의하면, 함수의 맨 윗 부분으로 끌어올려져 전역 변수를 덮어쓰게 된다.



2. 함수 반환하기

함수는 객체이기 때문에 반환값으로 사용될 수 있다.

setup()은 반환된 함수를 감싸고 있기 때문에 클로저를 생성한다.

클로저는 코드 외부에서 접근할 수 없기 때문에, 비공개 데이터 저장을 위해 사용할 수 있다.



3. 자기 자신을 정의하는 함수

이 패턴은 함수가 어떤 초기화 작업을 단 한 번만 수행할 경우, 자기 자신을 재정의하여 구현 내용을 갱신하는 용도로 사용된다.

재정의된 함수의 작업량이 적기 때문에 애플리케이션 성능에 도움이 된다.


단점 

 - 자기 자신을 재정의한 이후에는 원본에 추가했던 프로퍼티들을 찾을 수 없게 된다

 - 다른 변수에 할당되거나, 객체의 메서드로 사용되면 재정의된 부분이 아닌 원본 함수의 본문이 실행된다.


일급 객체로 사용 예

마지막에 전역 scareMe()가 호출되었을 때 재정의한 본문이 처음으로 실행되며, property도 더이상 참조할 수 없게 된다.



4. 즉시 실행 함수

함수가 선언되자마자 실행되도록 하는 문법이다.

초기화 코드에 유효범위 샌드박스를 제공한다는 점에서 유용하다.
모든 코드를 지역 유효범위로 감싸고 어떤 변수도 전역 유효범위로 새어나가지 않게 한다.



즉시 실행 함수의 매개변수

일반적으로 인자를 너무 많이 전달하지 않는 것이 좋다.



즉시 실행 함수의 반환 값

어떤 객체의 프로퍼티가 객체의 생명주기 동안 값이 변하지 않고, 처음에 정의할 때는 적절한 계산 작업이 필요한 경우

이 작업을 즉시 실행 함수로 감싼 후, 즉시 실행 함수의 반환 값을 프로퍼티 값으로 할당한다.



5. 즉시 객체 초기화

객체가 생성된 즉시 init() 메서드를 실행해 객체를 사용한다.
init() 함수는 모든 초기화 작업을 처리한다.

이 패턴은 주로 일회성 작업에 적합하다.
init()이 완료되고 나면 객체에 접근할 수 없다.
init()이 완료된 이후에도 객체의 참조를 유지하고 싶다면 init()의 마지막에 return this;를 추가한다.



6. 메모이제이션 패턴

함수는 객체이기 때문에 프로퍼티를 가질 수 있다.

함수에 프로퍼티를 추가하여 결과(반환 값)를 캐시하면 다음 호출 시점에 복잡한 연산을 반복하지 않을 수 있다.
이런 활용 방법을 메모이제이션 패턴이라고 한다.


cache 프로퍼티는 함수로 전달된 param 매개변수를 키로 사용하고 계산의 결과를 값으로 가지는 객체다.
결과 값은 필요에 따라 복잡한 데이터 구조로 저장할 수도 있다.


7. 설정 객체 패턴

설정 객체 패턴은 라이브러리나 다른 프로그램에서 사용할 코드를 만들 때 특히 유용하다.

function addPerson(first, last, dob, gender, address) {...}


addPerson("Bruce", "Wayne", new Date(), null, null, "batman");

매개변수가 많은 함수를 호출할 때는 선택적인 매개변수도 전달해야 하며, 매개변수의 순서가 뒤섞이지 않게 주의해야 한다.


모든 매개변수를 하나의 객체로 만들어 대신 전달하는 방법이 더 낫다.

var conf = {

username: "batman",

first: "Bruce",

last: "Wayne"

};


addPerson(conf);


설정 객체의 장점

 - 매개변수와 순서를 기억할 필요가 없다.

 - 선택적인 매개변수를 안전하게 생략할 수 있다.

 - 읽기 쉽고 유지보수하기 편한다.

 - 매개변수를 추가하거나 제거하기가 편하다.


단점

 - 매개변수의 이름을 기억해야 한다.

 - 프로퍼티의 이름은 압축되지 않는다.


이 패턴은 함수가 DOM 엘리먼트 생성할 때나 CSS 스타일을 지정할 때 유용하다.





공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함