오버플로
1. 사전적 의미
'''Overflow'''
'넘치다', '범람하다'를 의미하는 영단어.
2. 컴퓨터 용어
프로그래밍에서 메모리 용량을 넘어선 값이 들어가 생기는 오류.
예를 들어 0001=1, 1001=-7 처럼 최상위 비트가 부호를 의미할 경우[1] , 원래 +7이던 값에 1을 더하면[2] -8[3] 이 되어버린다.
종류에 따라 발생 시 오류 메시지를 출력하는 경우도 있고, 그러지 않는 경우도 있다. 이 중 오류 메시지를 출력하지 않는 경우가 더 위험하다. 잘못된 정보로 명령을 계속 수행하기 때문에 쓰레기 값을 출력하거나 오류 메시지를 출력하는 곳과 오버플로가 일어난 곳이 다른 일이 일어날 수가 있다.
오버플로의 가장 많은 예로 스택 오버플로(Stack Overflow)가 있다. 함수는 변수 등을 저장하기 위해 스택을 만드는데, 이 함수가 재귀적으로 계속 실행되면 스택이 점점 생겨난다. 이러면 어느 순간 메모리가 모자라는 순간이 되는데 이때 생기는 오류다. 프로그래밍 언어를 만들 때, 이 스택 오버플로가 잘 일어나지 않도록 하는 것도 일이다. 응용형으로 버퍼 오버플로(Buffer overflow)가 있다. 할당된 범위의 메모리를 벗어난 주소로 접근하게 되는 것으로, 하트블리드 사태도 이런 버퍼 오버플로로 벌어진 것이다.
정수(int)의 경우 보통 크기가 32비트이다. 첫 비트는 부호 비트이고 나머지 31개의 비트에 숫자의 절댓값을 정하므로, 231-1(=2147483647[4] )보다 큰 수는 저장할 수 없다. 음수는 절댓값을 2의 보수로 저장한다. 그래서 -1에 1을 더하는 연산을 하면 자연스럽게 0이 되며, 반대로 2147483647에 1을 더하면 -2147483648이 된다. 프로그래밍을 배울 때 반복문으로 2를 계속 제곱하면 어느 순간 이상한 음수가 나오더니 0이 되어버리는 것도 오버플로 때문이다.
많은 사람들이 하는 실수로, 정수의 최솟값(4바이트 정수의 경우 -2147483648)에서 1을 뺄 경우 최댓값(4바이트 정수의 경우 2147483647)이 되는 것은 언더플로가 아니라 오버플로이다. 산술 언더플로(Arithmetic underflow)는 부동소수점 연산에서 지수부가 타입의 한계를 넘어 작아지면 0에 가까워지다가 결국 0이 되어버리는 현상을 의미한다. 하지만 많은 사람들이 정수 자료형에서 최댓값에서 최솟값으로 넘어가는 오버플로와 구분하기 위해 언더플로라는 용어를 혼용해서 사용하고 있다.[5]
프로그램의 안정성과 신뢰성에 직결되는 문제이므로, 이것에 대한 대비(정확히 말하면 메모리 관리)가 얼마나 꼼꼼한지로 프로그래머의 실력을 가늠할 수 있다. 그렇지만 요즘엔 컴퓨터가 정말 좋아서 웬만한 건 전부 int, 아니면 double[6] 로 저장하는 바람에 오버플로가 잘 안 난다. 물론 상업적인 프로그램을 제작하는 실무 프로그래머들의 입장에서는 사소한 오버플로, 또는 프로그램의 의도치 않은 동작을 절대로 놔두어서는 안 된다. 사소한 버그가 치명적인 보안 취약점이 되어 해커들에게 이용당할 수 있기 때문이다. 단순한 정수 오버플로 역시 보안 취약점이 될 수 있다. 다만 C++같이 저수준 제어를 하는 언어를 제외한 대부분의 고수준 언어들은 웬만하면 자체 해결책이 있다. JavaScript처럼 변수라고만 선언해도 언어가 자동으로 자료형을 결정하는 언어도 있다. C++은 변수가 서로 호환이 안되고 서로 다른 자료형끼리 연산하려 하면 컴파일 에러가 난다. float형 변수는 소수점이 반드시 존재하는 변수형인데 int나 double에서 float형 변수로 강제로 변환하면 컴퓨터가 알아서 소수점을 써넣거나 오버플로를 아주 열심히 하다가 죽는다.
보다 심각한 문제도 있었는데, 1996년 아리안 5 로켓이 발사 후 37초만에 궤도를 벗어나 자폭하였다. 그 로켓에는 무려 5억 달러짜리 통신위성이 탑재되었기 때문에 당연히 엄청난 피해가 발생했다. 나중에 조사해본 결과 컴퓨터로 조종되던 엔진 노즐에 잘못된 데이터가 전송된 때문이었고, 그 이유는 64비트 부동소수점 데이터를 16비트 정수형 데이터로 변환하는 과정에서 생긴 오버플로였다. 원래 그 코드는 아리안 4에서 가져온 코드였는데, 당시 학자들은 아리안 4의 속도는 절대 16비트 정수형의 최댓값을 넘지 못할 것을 알았기 때문에 최적화의 이유로 16비트 정수형을 사용했던 것이고, 아리안 5는 속도가 더 빨랐기 때문에 그걸 넘었던 것.
후일 오버플로 문제가 아님이 밝혀졌다.
마인크래프트에서 give 명령어를 사용해 마법부여를 최대 32767까지만 올릴 수 있는 이유도 오버플로 때문이다. 32768 이상을 입력하게 되면 그대로 '''-'''32768이 되어 1보다 못하다.[예시] 현재는 해당 변수의 정수형을 교체해서 2147483647까지 마법부여가 가능하다.
Windows XP에서도 날짜를 조작한 다음 재부팅하면 이렇게 된다.
현실에서 비슷한 예시를 꼽자면 극과 극은 통한다가 있다.
2.1. 10진수 오버플로
[image]
10진수 기반 시스템에서 발생하는 오버플로다.
초창기의 컴퓨터는 BCD(Binary Coded Decimal) 나 EBCDIC(Extended Binary Coded Decimal Interchange Code)이라 불리는 10진수 기반의 수체계를 사용했다. 또한, 이 당시에 사용하던 코볼(COBOL) 같은 컴퓨터 언어도 이런 수체계 기반을 사용하도록 만들어져 있었다. 그래서, 99나 999를 넘어가면 100이나 1000이 되는 것이 아니라 0이 되어버리는 버그가 존재했다.
이로 인해서 가장 문제가 되었던 것이 바로 '''Y2K 문제'''이다. 년도 저장을 위해서 2자리의 십진수 정수형만 사용하다 보니 (19)99년 다음에 2000년이 되어야 하는데 (19)00년이 되어 버리는 버그다.
2.2. 8비트 오버플로
8비트 정수의 저장 범위는 최상위 비트를 음수 부호로 사용하는(signed) 경우 -128 ~ 127이고, 음수 부호를 사용하지 않는(unsigned) 경우 0 ~ 255이다. 255나 127을 넘어 갈 경우 오버플로가 발생한다.
- 스타크래프트: 본래 유닛의 공격력과 방어력은 3까지만 업그레이드가 가능하지만 특수 맵 에디터를 이용하면 255까지 업그레이드가 가능한 유즈맵을 만들 수 있다. 이 유즈맵에서 저그 지상군 방어력을 255까지 업그레이드 완료한 상태에서 울트라리스크 방어력 추가 업그레이드를 하면 오버플로가 일어나 방어력이 1로 떨어진다.
- 슈퍼 마리오브라더스: 3-1의 마지막 계단에 있는 엉금엉금을 계속 밟아 남은 마리오의 수를 계속 늘릴 수 있는 기술이 있다. 하지만 이 게임에서의 최대 남은 마리오의 수는 127이다. 그런데 최대 남은 마리오의 수를 달성한 후 더 이상 올라가지 않게 막도록 프로그래밍되어 있지 않아 이를 초과하면 오버플로로 남은 마리오의 수가 0으로 인식되어버리기 때문에 이 상태에서 실수하면 그대로 게임 오버가 된다.[7] 그리고 한 가지 더 있는데, 그 유명한 마이너스 월드. 1-2의 맨 마지막에 있는 지상으로 올라가는 토관 위에서 오른쪽에서 두 번째 블록을 부수고, 왼쪽을 바라보고 웅크린 상태에서 점프하여 맨 오른쪽 블록에 닫아 마리오가 벽 안에서 오른쪽으로 서서히 움직이도록 만들자. 그 후 곧장 나오는 파이프로 들어가면 마이너스 월드에 들어가게 된다.[8]
- 파이어 엠블렘 창염의 궤적: 무기연성에서 원래 필살수치가 있는 무기의 필살치를 마이너스로 만들면 간디 버그 마냥 필살률이 255가 되는 버그가 존재한다.
- 팩맨: 원래는 스테이지가 255까지 있도록 프로그래밍되었으나, 오버플로로 스테이지 256이 생겨났다. 스테이지 256에 도달하면 이상한 문자들과 기호, 스프라이트들이 화면의 반을 메우고, 다음 레벨로 진행할 수 없다.
- 풋볼 매니저 모바일: 선수의 한 시즌 득점이 255골을 넘어가면 기록이 0으로 초기화된다.
- 풍래의 시렌: 소지품/기탄 0인 상태에서 독초나 썩은 주먹밥 대미지로 자멸하면 스코어가 괴상하게 변하거나, 무기의 - 수치가 본래 무기의 수정치를 초과했을 경우 공격력이 255까지 변화하거나, 풀강한 장비에서 장비 자체의 수정치는 오버플로를 인식하지만 합성능력의 가격은 인식 못하여 팔았다 샀다 하는 것만으로 본전치기가 가능한 등 수치가 꼬이는 버그가 꽤 많이 존재한다.
2.3. 16비트 오버플로
16비트 정수의 저장 범위는 -32768 ~ 32767(signed) 또는 0 ~ 65535(unsigned)이다. 65535나 32767을 넘어갈 경우 오버플로가 발생한다.
- 빈센트 발렌타인: 빈센트의 최강 무기는 적을 처치할 때마다 위력이 강해지는데, 65535마리 이상을 처치하면 공격력이 무한에 가까워져 최강 보스 마저도 일격에 이길 수 있다. 자세한 것은 항목 참조.
- 스타크래프트: 스타크래프트의 방어력은 8비트로 저장하며 이 때문에 최대 255까지만 업그레이드가 가능하고 공격력은 65535까지 가능하다. 때문에 방어력이 255를 넘으면 1로 되돌아가고 공격력이 65535를 넘으면 표기 대미지가 65535 이상이라도 실제 공격력은 0부터 시작한다. 다만, 실제 데미지는 0.5가 들어간다. 엔진상으로 데미지연산은 이진법에서 끝자리가 1로 끝나는 홀수만을 사용하기 때문으로 추정된다. 요즘은 EUD나 에디터의 발달 덕분에 유즈맵에서 오버플로를 경험할 일은 별로 없는 편. 스타크래프트 2에서도 게임 시간이 32768초[9] 에 가게 되면 모든 세력이 나가고 게임에서 나가게 된다.
- 슈퍼로봇대전 시리즈:윙키 시절 슈퍼로봇대전은 16비트 오버플로 때문에 적 체력이 65000을 넘지 못했고, Z시리즈 전까지는 최대로 낼 수 있는 대미지가 65535였다.
- 성검전설 3의 블랙 라비
- 폴아웃: 뉴 베가스: 전 재산이 32767캡 초과인 상태에서 모든 캡을 탑스 카지노 칩으로 바꾼 뒤 모두 버리면 탑스 카지노 칩의 갯수가 마이너스 단위로 나타나게 되는데 이때 탑스 카지노 칩을 줍고 카지노 칩을 캡 등 재화로 환전하면 무한으로 환전이 가능하다.[10] 이를 이용해 환전을 반복하여 전 재산을 몇백만 캡 단위로 불릴 수 있다.
- 브롤스타즈: 공격력이 32768이 넘으면 1이 돼서 1렙 틱에게도 의미없는 데미지가 된다.(예시: 테이크다운에서 파이퍼가 80~90개 이상 파워 큐브를 수집#) 그리고 체력이 65536을 넘어가면 게임이 튕긴다.
2.4. 32비트 오버플로
32비트 정수의 저장 범위는 대략 -231 ~ 231-1(signed) 또는 0 ~ 232-1(unsigned)까지이다. 이 값을 넘어 갈 경우 오버플로가 발생한다. 이 값들을 풀어 쓰면 '''4294967295'''과 '''2147483647'''인데, 관련 버그에서 흔히 등장하는 값이다.
- 2038년 문제
- 497일 문제
- 강남스타일: 조회수가 2147483647을 넘기자 조회수가 오버플로해 음수 단위로 떨어지는 척하는 이스터 에그를 만들었다. 물론 조회수를 저장하는 변수는 해당 시점 이전에 64비트로 갈았다. 자세한 내용은 유튜브 특별 서비스 단락을 참조.
- 메이플스토리: 옛날부터 메이플을 해온 유저들은 2,147,483,647이라는 숫자가 익숙할 것이다. 바로 옛날 풀 메소 수치로, 이 숫자는 위에서 설명된 것처럼 32비트로 나타낼 수 있는 "부호가 있는 숫자" 중 최댓값이다. 그리고 보스 몬스터의 HP도 해당 수치를 넘길 수 없어 시그너스의 경우 체력 회복을 40번이나 했었다. 지금은 직접 조 단위의 숫자 시스템을 구현하여 해당 문제는 사라졌다.
- 워크래프트 3: 해당 문서에는 없으나 영웅의 경우 체력값이 본래 체력+힘×1당 체력 증가 수치이므로 유즈맵 등에서 아이템으로 힘이나 체력 감소로 체력이 0 미만이 되었을 경우 체력이 0으로 간주하고 사망하게 된다. 다시 재부활하게 될 경우 체력이 정확히 0이라면 1/1으로, 0 미만이라면 1/4294967136으로 표시된다.
- 하스스톤: 공격력, 생명력 또는 방어도가 2147483647을 넘기면 오버플로 현상으로 인해 0이 되어버린다.(#) 하지만 이러한 경우는 보통 이러한 상황을 위해 실험하는 경우이며 실제로 이런 상황이 생기는 경우는 극히 드물다.
- 마인크래프트: 경험치 레벨이 2147483647레벨을 넘으면 다시 0레벨이 된다. 인챈트 또한 2147483647레벨까지만 붙일 수 있다. 또한 /xp 명령어로 줄 수 있는 경험치의 최대 양도 2147483647이다.
- 쿠키런: 핑크초코 쿠키에서 점수 폭주가 발생했고, 21억에 도달하면 0으로 리셋되는 버그가 존재했었다. 현재는 패치로 수정되었다.
- 쿠키런: 오븐브레이크: 32비트 운영체제 한정으로 떼탈출에서 21.4억을 넘기면 점수가 -21억이 되는 버그가 있었다. # 이후 패치로 32비트 운영체제에서 21.4억을 넘기면 점수가 표시되지 않게 바뀌었다. 64비트 운영체제는 21.4억을 뚫어도 정상적으로 점수 표시가 된다.
- 그란 투리스모 시리즈: 그란 투리스모 3에서 시애틀 서킷에서 토요타 GT-One 같은 다운포스가 큰 차를 타고 맵을 뚫고 가속하면 어느새 차가 들리면서 속도가 붙더니 21억 km/h 혹은 21억 mph 로 가속되며 높은 확률로 게임이 뻗어버린다.
- 옛날에 만들어진 리니지(게임)이나 뮤 온라인, 라그하임 등의 옛날 온라인 게임의 경우에 소지가능한 화폐의 양을 32비트 정수로 해서 최대 20억 ~ 21억 정도까지만 소지되게끔 해놓은 게임이 많았다. 그래서 이런 오버플로를 막기 위해 소지 가능한 액수를 아예 20억이나 21억으로 잡아두고 추가 소지를 못하게 하면서 대체 화폐 아이템을 만들거나 혹은 시스템 자체를 갈아엎어서 21억 이상이 소지되게 변경한 경우가 주를 이룬다.
- Egg, Inc.: 가격이 황금 계란 1000개 이상인 부스터를 사용할 때에는 진짜로 사용할 것인지 물어보는데, 해당 부스터가 1개 있는 상태에서 Yes 버튼을 두 손가락으로[11] 터치하면 부스터가 두 번 사용되고, 개수는 -1에서 부호 없는 32비트 정수형 최댓값인 4294967295로 오버플로된다.
- 스텔라리스의 경우 (2.5버전까지 기준으로) 주로 210만 정도를 초과할 때 오버플로가 발생하는데, 고정 소수점 방식의 실수 구현 때문이다. signed 32비트의 한계인 2,147,483,647의 대략 1/1000인 것으로 봐서, 32비트에 10비트 지점을 고정한 방식으로 보인다. 자세한 것은 모드 정보의 주의 사항 참고.
2.5. 기타
- 괴리성 밀리언아서: 암속성 헤브리디즈에서 유저들이 감전 데미지를 증폭해서 1800만 데미지를 넘겨 1데미지로 표기되는 오버플로 현상이 있었다. 후에 수정되어 더 이상 문제는 없다.
- 던전 앤 드래곤 섀도 오버 미스타라: 매직 유저가 마법의 대미지를 올려주는 최강의 지팡이 스태프 오브 위저드리를 착용한 상태에서 최강 마법 메테오 스웜을 사용하면 오버플로 현상이 발생, 평타 한대만큼의 쥐꼬리만한 대미지가 들어간다.
- 오버워치: 경쟁전 시즌 2에서 1점에서 패배하면 0점이 아닌 가장 높은 5,000점이 되었다. 실제로 이런 유저가 등장했었다.
- 메탈슬러그 디펜스: 오버플로로 인해 무한 메달 획득이 가능한 버그가 발생했다. 해당 문서 버그 문단 참조.
- 팝픈뮤직: BEMANI 시리즈에 속한 다른 기종에 비해 유독 오버플로 계열 버그가 많이 발생한다. MASS YOSHITAKA新曲이라든지, 팝픈뮤직 éclale의 호감도 버그라든지.
- 모두의마블: 봉인석 버그는 오버플로를 이용한 버그이다.
- Windows 10: 계산기로 e+9999를 초과하면 오버플로라는 문자와 함께 한번 더 계산을 하면 0으로 된다.
- Games Done Quick에서 슈퍼마리오 월드를 TAS로써 즉석으로 해킹해(!) 해당 게임의 에셋으로 또다른 미니게임을 만드는 장면이 있는데(상세는 항목참조) 오버플로가 일어날 수 있는 메모리상의 헛점을 발생시킨뒤 이를 역이용한것으로 보인다. 사실 이쪽은 임의 코드 실행에 가까운데 오버플로가 임의 코드 실행을 하게 만드는 구멍중 하나로 작용하는 것일뿐.
- GPS 신호 중 주(week)를 기록하는 부분은 8비트도 16비트도 아닌 10비트로 대략 19.7년마다 오버플로가 일어난다. 1999년과 2019년에 오버플로가 있었다.
- EUD - 스타드래프트를 방불케 하는 사실상 임의 코드 실행이 가능해진게 특정 게임 계산 수치의 오버플로가 발견되었고 이 '오버플로 구멍'을 통해 게임에 허용하는 것을 초과한 데이터를 넣을 가능성이 생긴 것이다. 물론 그만큼 게임을 넘어선 해킹이 가능할수도 있기에 블리자드가 막으려 했었다.
- SCP: Secret Laboratory에서 가장 낮은 수위카드를 SCP-914에서 굵음(낮은거에서 2번째)로 돌리면 최고등급 카드인 블카가 완성 된다.
- 버퍼 오버플로
2.6. 관련 문서
3. 일본의 에로게 상표
4. 창세기전 3: 파트 2의 기술 중 하나
사이클론 일반형에서 배울 수 있는 어빌리티로, 적에게만 사용 가능하다. 이 어빌리티에 걸린 적은 어빌리티 사용시 필요한 소울치가 증가한다. 가령 살라딘이 걸렸을 경우, 천지파열무에 필요한 소울이 150이 아니라 154, 163 이런식으로 평소보다 더 많은 소울이 필요하게 된다는 것이다. 또한 기술 레벨에 따라 증가하는 필요 소울치의 양이 증가한다.
그러나 사실상 필요 없는 기술. 솔직히 적군이 쓰는 경우는 한없이 드물고, 설령 적군이 아군한테 사용한다고 해도 캐릭터가 전체 공격 기술을 두세 개씩 보유하고 있는 데다가 평타만으로도 충분히 다 때려잡을 수 있는 창세기전 3: 파트 2에서는 별 의미도 타격도 없다.
과거 창세기전 아레나가 서비스 될 때 아주 가끔 쓰는 경우도 있었다. 그러나 역시나 사용 빈도는 매우 적었다, 차라리 리미트플로를 더 많이 쓰는 편.
또한 상당히 유저들의 짜증을 사고 있는 기술이기도 하다. 창세기전 3: 파트 2에서 군단필살기, 어빌리티, 공격력 등으로 가장 쓸만한 군단 중 하나인 바루스 슬레이어의 용병 캐릭터 '스턴'이 이 기술을 가지고 있는데, 이 양반이 소울 채워지면 평타 때릴 생각은 안 하고 허구헌 날 오버플로만 쓰고 있다. 근데 더 열받는 건 시전 시간도 꽤 길다는 것. 다른 아군들이 평타 다 때리고 대기하고 있는데 스턴 혼자 오버플로를 쓰는 경우가 대다수이다.
4.1. 관련 문서
5. GUN X SWORD에 등장하는 설정
반은 갈고리 손톱의 남자의 습격에 의해 빈사상태가 되고, 그를 살리기 위해 가드베드는 반을 개조하고 단 오브 서즈데이에 그를 등록하게 된다.
하지만 그는 본디 다른 네오 오리지널 7의 멤버들처럼 개조 없이 오리지널을 조종할 수 있는 체질이었고[12] , 그런 그가 개조된 끝에 발현된 미지의 가능성이다.
본편 마지막에서 등장하여, 실제로 어떤 능력인지 정확히는 알 수 없지만 여러 요인에 의해 발현된 미지의 가능성이라는 점에서, 컴퓨터 프로그램의 오류인 1번이 모티브인 듯 싶다. (실제로 컴퓨터 프로그램에서 오버플로가 발생한 경우 '''예측하지 못한 오류'''가 발생함)
뭐……뭐냐, 이건??
오버……플로…….
뭐라고?
아마도…… 결번 멤버는 원래부터 개조 따위 하지 않아도 (갑주를) 움직일 수 있는 힘이 있었다고 밖에는……. 마더의 기술과 새로운 가능성의 융합…….
6. 사운드 볼텍스 비비드 웨이브의 수록곡 ΩVERFLOW
7. FANTASTICS from EXILE TRIBE의 수록곡 Overflow
[1] 음수일 경우 그 수의 2의 보수가 절댓값이라는 점에 주의하기를 바란다. 부호화 절대치, 1의 보수를 이용해 음수를 만드는 것도 이론상 가능하다. 그러나 이렇게 하면 +0과 -0이 서로 다르므로 많이 귀찮아진다. 따라서 컴퓨터에서는 2의 보수로 음수를 표현하는 게 일반적이다.[2] 0111(2)+1(2)=1000(2)인데, 1000(2)를 2의 보수를 절댓값으로 가진 음수로 변환하면 -(7+1)=-8[3] 보통 00000....은 0을, 11111...은 -1을 의미한다. 때문에 최솟값의 절댓값이 1 크다.[4] 8번째 메르센 소수로, 레온하르트 오일러가 1772년에 이 수가 소수임을 발견했다.[5] 이 경우엔 주로 정수 언더플로(Integer underflow)라는 용어를 사용해 산술 언더플로와 다르다는 것을 명시하는 편이다.[6] 실수 저장 가능. 실수 자료형 중에서 일반적으로 가장 많이 사용되고, 크기는 8바이트(int의 2배).[예시]
/give @p diamond_sword{Enchantments:[{id:"sharpness",lvl:32767}\]}
라고 입력하면 날카로움 32767의 다이아몬드 검을 얻지만, /give @p diamond_sword{Enchantments:[{id:"sharpness",lvl:32768}\]}
이라고 입력하면 날카로움 '''-'''32768의 검을 얻게 된다. 때리면 몬스터가 치료되는 마법의 검.[7] 이 개념을 럭키스타 9화에서 이즈미 코나타가 엔딩 곡이 나온 이후 다음 이야기 소개 때 설명해준다.[8] 여기서 월드를 나타내야 할 칸이 빈칸으로 나오는 것도 오버플로 때문인데, 사실은 월드 36이지만 프로그램에서는 36을 빈칸으로 인식하여 나타나는 것이다.[9] 9시간을 약간 넘는 시간이다.[10] 이때 얻는 캡의 갯수는 65535에서 가지고 있는 칩 갯수를 뺀 만큼 얻는지라 칩이 32768캡에 가까울수록 얻는 캡이 많아진다.[11] 엄밀히 말하면 두 터치 간격이 30ms 이하여야 한다.[12]