
#include <stdio.h>
#define A 5
int main() {
printf("리하의블로그 %d", A);
}
위 메인함수에서 인쇄되는 것은 리하의블로그 5 일 것이다. 이때 %d를 포맷 스트링이라 한다. A라는 문자를 10진수로 출력하겠다는 얘기. %c면 문자로 뽑겠다는 얘기다. 하나의 대상을 여러 타입으로 뽑을 수 있는 건 보통 ASCII일 것인데, A를 %c 하면 'A'가 나올 것이로 %d 하면 65가 나올 것.
둘이 한 단어가 아니었다. 쓰로틀링을 디바운싱 하는게 아니라 쓰로틀링과 디바운싱이 각각의 기법이구나. 디바운싱과 쓰로틀링에 대해 설명해놓은 참고 블로그를 보았다.
블로그에 따르면, 쓰로틀링과 디바운싱은 정확히는 JS만의 기법이 아니라 프로그래밍 기법의 일환이라고 한다. 디바이스에 무리를 주지 않기 위한 최적화 기법이라고. 쓰로틀링을 알려면 디바운싱을 먼저 알아야 하는 것 같다.
디바운싱은 연속으로 호출되는 함수를 처음 혹은 마지막 것만 호출하는 것. 이벤트 핸들러가 너무 자주 호출되는 것을 방지하고자 할 때 사용한다. ajax 검색에 주로 쓰인다고 한다. setTimeout을 500ms로 설정한 경우, 0.5초동안 마우스를 광클해도 0.5초 뒤에 딱 한번만 카운트가 올라가는 셈.
쓰로틀링은 일정 시간동안 핸들러가 한 번만 호출되도록 조절하는 것. 연속으로 발생하는 특정 이벤트를 일정 간격으로 나눌 때 사용한다. 스크롤 이벤트에 주로 쓰인다고 한다. setTimeout을 300ms로 설정한 경우, 마우스를 연타해도 0.3ms에 한 번만 반영 되는 것.
쓰로틀링과 디바운싱을 이미지로 보면 다음과 같다고 한다.

참고블로그가 참고한 원본(?)블로그를 살펴보았다.
Type-safety 라고도 한다. 처음 단어만 들었을 땐 단순히 C++이나 JAVA처럼 타입이 강타입 언어를 말하는 줄 알았다. 그래서 Javascript는 타입 안정성이 없어 그걸 타입스크립트로 보충하고, C++은 타입 안정성이 있는 것이라 생각했다. 그런데 아니네.😔
그렇다면 타입 안정성이란 어떤 성질을 말하는 것인가?
참고 사이트에 따르면 사실 언어에 따라 타입 안정성이 의미하는 바도 조금씩 다르다고 한다. 단순히 표현하자면 타입 안정성은 잘 정의됨(well-defined)을 보장하는 것이라고.

”잘 타입된 프로그램은 절대 잘못될 수 없다”
(Well typed programs cannot go wrong)
어떤 경우에 well-typed 라고 할까? '타입 안정성이 프로그램을 잘못되게 하지 않을 때' 를 의미한다고 한다. 그렇다면 프로그램이 잘못 된다는 건 어떤 것일까?
프로그래밍 언어는 고유의 문법(syntax)과 의미(semantic)에 의해 정의된다. 모든 언어는 '문법적으로는 옳지만 의미적으로는 문제가 있는' 프로그램이 많다는 것에 직면한다.
char buf[4];
buf[4] = 'a';
위 코드는 각 줄만 봤을 때 문법적으로 문제는 없다. 하지만 의미적으로 보았을 때 이 코드는 오류를 일으킨다. 이런 것에서 보호받을 수 있는 특성이 타입 안정성이다.
C의 표준 타입은 의미없는 코드를 배제하지 않는다. 이를테면 버퍼의 끝에 적는 것 같은 행위들. 이런 것 때문에 타이핑을 잘 한 C 프로그램도 잘못될 수 있다. '문법적으로는 틀리지 않았지만 에러가 발생하는 코드'가 발생할 수 있다. C++은 C의 superset이므로 C의 속성을 따라간다고 할 수 있어 역시 type-safe 하지 않다.
초기 자바의 제네릭은 버그가 많았지만 featherweight JAVA에서는 타입 안정성을 판단할 수 있다. C에서는 배열 범위 밖의 원소에 접근하는 것이 의미가 없지만(meaningless), JAVA나 C#에서는 ArrayOutOfBoundsException을 throw 하므로 의미가 있다.