jquery-20:
1. 일반 함수
- 가장 일반적으로 사용한 함수를 지칭한다.
2. 중첩 함수
- 함수 안에 함수가 있는 경우 중첩되었다라고 하며 이 때, 함수안에 있는 함수를 중첩함수라고 한다.
- 함수 내부에는 일반 구문 뿐 아니라, 새로운 함수 구문까지도 넣을 수 있다. 이때 함수 내부에 만들어지는 함수를 중첩 함수라 칭한다.
1) 내부 전용 함수
- 중첩함수는 함수 내부의 지역변수처럼 함수 내부에서만 사용할 수 있다.즉, 함수 내부에서만 사용하는 기능을 중첩함수로 만들어 사용하는 것이다.
- 일반적으로 중첩함수는 이름이 없는 이벤트 리스너로 많이 활용된다
2) 중복 코드 또는 그룹화
- 함수 내부의 커다란 기능이나 중복 코드를 내부 함수로 만들어 재사용할 때도 중첩함수를 사용한다. 아울러 중첩함수는 외부 함수와
- 내부 함수의 아주 밀접한 관계일 때 사용하는 것이 좋다.
3) 중첩함수와 중첩함수를 포함한 함수와의 관계
- 중첩함수에서 중첩함수를 포함하고 있는 함수의 지역변수에 접근해서 사용할 수 있다는 점이다.
실행 결과는 어떻게 될까?
\1. a = 10
\2. b = 200
\3. c = 3000
3. 콜백 함수
함수 실행결과 값을 리턴이 아닌 매개변수로 넘어온 함수를 호출해서 넘겨주는 방식을 콜백이라 하며 이때 매개변수로 넘어온 함수를 콜백함수라 한다.
1. 콜백 함수란?
문법
function fun(callback){
....
callback(결과);
}
- 콜백 함수는 주로 함수 내부의 처리 결과값을 함수 외부로 내보낼 때 사용한다.(일종의 return문과 비슷한 기능을 한다.)
- 콜백 함수를 사용하는 구조는 특정함수의 매개변수 값으로 콜백함수를 넘긴 후, 처리 결과를 콜백 함수의 매개변수에 담아 콜백 함수를 호출하는 구조를 가지고 있다.
- 이에 따라, 로직 구현 부분은 동일하고 로직 처리 부분을 다양하게 처리해야 하는 경우에 유용하다.(예제로 살펴보자)
2. 콜백 함수의 예
-
위와 같이 로직 구현부는 동일하게 하고, 로직 처리 부분을 분리해서 구현하여 원하는 로직 처리 부분을 호출하면 된다.
-
그렇게 되면 유지보수 할 때 로직 처리 부분만 수정을 하면 되므로 큰 장점이 된다.
-
아울러, 로직 처리 부분을 다양하게 하여 필요에 맞게 로직 부분과 처리 부분을 조립하듯이 연결하여 사용이 가능하다.
3. 콜백 함수냐? return문이냐?
[ return문을 사용한 경우 ]
[ 콜백 함수를 사용한 경우 ]
-
위와 같이 return문이나 콜백 함수를 사용하면 결과는 동일하다.
-
하지만, 통상적으로 단순한 처리는 return문을 이용하는 것이 더 효율적이다.
-
콜백 함수는 사용해야 하는 경우는 처리 부분과 구현 부분과 분리되어야 하는 경우나 구현 부분은 하나로 하고 </br> 처리 부분을 다양하게 만든 후 실행 시에 연결해서 사용하는 경우에 적합하다.(중요)
4. 콜백 함수를 이해하기 위해서 동기와 비동기의 개념을 확실히 알자.
- 동기(synchronize) : 일반적으로 함수가 호출된 후 끝날 때까지 다음 구문을 실행하지 않고 대기하는 것을 동기라고 칭한다.
[ 동기문을 사용한 경우 ]
- 비동기(unsynchronized) : 비동기는 동기의 반대 개념이다.함수가 호출된 후 끝날 때까지 기다리지 않고 다음 구문을 바로
실행하는 것을 비동기라 칭한다.
- 동기, 비동기의 개념을 알아야 하는 이유는 바로 콜백 함수가 주로 비동기 함수의 결과값을 처리하기 위한 방법으로 주로 사용
되어지기 때문이다.(중요)
5. 실무에서 콜백 함수는 다음과 같은 경우에 많이 사용된다.
- 이벤트 리스너로 사용(버튼을 클릭 등)
- 타이머 실행 함수로 사용(특정 시간마다 실행하는 경우 등)
- 서버와 데이터를 주고받을 때 사용하는 jQuery Ajax 기능들에서 결과물을 받을 때(서버 접속, DB접속 등)
- jQuery 애니메이션 기능에서 애니메이션이 모두 끝났을 때, 실행하고자 하는 함수
- 즉, 위와 같이 콜백 함수는 로직 구현 부분과 로직 처리 부분을 나눠 작업할 때 주로 사용한다.
4. 클로저 함수
- 일반적인 함수의 경우 함수 호출에 의해 함수 내부의 실행구문을 모두 실행하게 되면 함수 내부에서 만든 지역변수가 자동으로 사라지지만
- 어떤 경우에는 사라지지 않고 남는 경우가 존재하는데 이 현상을 클로저라고 하며 이 현상을 일으키는 함수를 클로저 함수라 칭한다.
1. 클로저란?
- 클로저는 함수 내부에 만든 지역변수가 사라지지 않고 계속해서 값을 유지하고 있는 상태를 의미한다.
- 일반 지역 변수의 경우 함수 호출이 완료되면 사라지는게 원칙이다.
- 하지만 좌측과 같이 클로저를 이용하면 함수 호출 완료 후에도 사라 지는 지역변수를 사라지지 않는 데이터 저장소로 만들 수가 있다.
- 위와 같이 변수가 메모리에서 제거되지 않고 계속해서 값을 유지하는 상태를 클로저라고 칭하며,
내부에 있는 함수를 클로저 함수라 부른다
- 위 함수도 역시 start()가 실행되면서 지역변수인 count변수가 만들어지고
- setInterval의 익명함수에서 count를 사용하고 있기 때문에 값이 계속해서 증가가 된다.
- 이 때 이 익명함수를 또한 클로저 함수라고 부른다.
- 이처럼 클로저 변수가 사라지지 않고 계속해서 값을 유지하는 상태를 전부다 클로저라고 한다.(중요)
2. 클로저의 장점
- 연관 있는 변수와 기능(중첩 함수)을 하나의 함수로 묶어서 독립적으로 실행시킬 수가 있다.
- 즉, 함수 내부에 데이터가 만들어지기 때문에 함수 외부에서 수정할 수 없는 보호된 데이터를 만들 수 있다는 것이다.
- 이런 형태의 데이터는 객체지향 프로그래밍에서는 private데이터 즉, 캡슐화 된 데이터라고 부른다.
[ 클로저를 사용하여 메뉴 선택 시 그 값을 계속 유지함 ]
댓글남기기