Long Press — 무엇인가, 앱에서의 길게 터치 제스처

저자: IT Sectr 게시일: 2026-02-27 읽는 시간: 8 분

Long Press는 손가락이 일정 시간(보통 0.5~1초) 동안 움직이지 않고 화면에 머무르는 길게 누르기 제스처입니다. Tap과 달리 Long Press는 터치 순간이 아니라 지연 타이머가 만료된 후에 인식됩니다. 이 제스처는 컨텍스트 메뉴 호출, 콘텐츠 미리보기, 여러 개체 선택 및 추가 작업 활성화에 사용됩니다. iOS에서는 UILongPressGestureRecognizer를 통해, Android에서는 setOnLongClickListener 또는 GestureDetector를 통해 구현됩니다.

주요 포인트

  • 지연 — Long Press와 Tap의 주요 차이점: 0.5~1초 동안 길게 누르기 필요
  • 컨텍스트 메뉴 — Long Press의 가장 일반적인 용도: 요소에 대한 추가 옵션 호출
  • UILongPressGestureRecognizer — 상태 콜백과 함께 길게 누르기를 처리하는 iOS의 기본 클래스
  • setOnLongClickListener — 길게 누를 때 리스너를 트리거하는 Android View 메서드
  • 다중 상태 — iOS에서 Long Press는 began, changed, ended, cancelled 상태를 거침

Long Press란?

Long Press(길게 누르기, 길게 터치)는 사용자가 화면을 터치하고 일정 시간 동안 손가락을 움직이지 않고 유지하는 멀티터치 인터페이스 제스처입니다. 시스템은 즉시 반응하지 않고 타임아웃(보통 500ms)을 기다리며, 타임아웃이 경과한 후에야 제스처를 Long Press로 인식합니다. 손가락을 더 일찍 떼면 일반 Tap으로 해석됩니다.

이 제스처는 현대 모바일 인터페이스의 기본 구성 요소입니다. Apple은 앱(Messages, Safari, Files)에서 컨텍스트 메뉴를 호출하는 데 사용합니다. Google은 Android의 텍스트 선택, 홈 화면 아이콘 재배치 및 컨텍스트 메뉴 호출에 Long Press를 도입했습니다. 웹 인터페이스에서 길게 누르기는 물리적 오른쪽 버튼이 없는 모바일 장치에서 마우스 오른쪽 클릭을 에뮬레이트하는 경우가 많습니다.

역사적으로 Long Press는 터치 스크린을 위한 컨텍스트 메뉴(오른쪽 클릭)의 대안으로 등장했습니다. 초기 구현은 저항막 방식 화면이 있는 장치(Palm, 2000년대 초 Windows Mobile)에서 나타났지만, iPhone과 Android의 출현과 함께 제스처가 표준화되었습니다. 두 플랫폼의 Human Interface Guidelines는 Long Press를 보조 작업으로 설명합니다 — Tap을 대체하는 것이 아니라 기능의 확장으로서 말입니다.

Long Press와 Tap의 차이점

Long Press와 Tap은 서로 다른 의미를 가진 두 가지 다른 제스처입니다. Tap은 즉각적인 터치로, 손가락이 화면에 닿았다가 100~300ms 내에 떼어집니다. Tap은 항상 기본 작업입니다: 앱 열기, 버튼 누르기, 링크 따라가기. Long Press는 보조 작업입니다: 컨텍스트 메뉴 열기, 편집 시작, 추가 정보 표시.

매개변수TapLong Press
누르고 있는 시간100~300ms500~1000ms
작업 유형기본(primary)보조(secondary)
예시링크 열기, 버튼 누르기컨텍스트 메뉴, 편집
피드백시각적(하이라이트)촉각(햅틱 피드백)
iOS APIUITapGestureRecognizerUILongPressGestureRecognizer
Android APIsetOnClickListenersetOnLongClickListener

핵심 규칙: Long Press를 작업을 수행하는 유일한 방법으로 절대 사용하지 마십시오. 사용자는 Tap이 기본 작업을 수행하고 Long Press가 추가 옵션을 열 것으로 기대합니다. 이 원칙을 위반하면(예: 링크를 열기 위해 길게 누르기 요구) 부정적인 사용자 경험과 접근성 저하로 이어집니다.

iOS의 Long Press: UILongPressGestureRecognizer

UILongPressGestureRecognizer는 길게 누르기를 처리하기 위한 iOS SDK의 표준 제스처 인식기입니다. UIGestureRecognizer에서 상속받으며 최소 지속 시간, 허용되는 손가락 이동 및 터치 수 구성을 지원합니다. 인식기는 타이머가 만료된 후 UIGestureRecognizerStateBegan 상태로 전환된 다음, 손가락이 움직이면 UIGestureRecognizerStateChanged, 손가락을 떼면 UIGestureRecognizerStateEnded로 전환됩니다.

swift
// 최소 지속 시간을 설정한 UILongPressGestureRecognizer
class ContextMenuViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let longPressRecognizer = UILongPressGestureRecognizer(
            target: self,
            action: #selector(handleLongPress(_:))
        )

        // 최소 누르고 있는 시간: 0.5초
        longPressRecognizer.minimumPressDuration = 0.5

        // 허용되는 손가락 이동: 10포인트
        longPressRecognizer.allowableMovement = 10

        customView.addGestureRecognizer(longPressRecognizer)
    }

    @objc func handleLongPress(_ recognizer: UILongPressGestureRecognizer) {
        guard recognizer.state == .began else { return }

        // 컨텍스트 메뉴 만들기
        let location = recognizer.location(in: self.view)
        ContextMenuPresenter.show(at: location)
    }
}

구성 매개변수: minimumPressDuration — 활성화 전 시간(초)(기본값 0.5, 접근성의 경우 0.65+ 권장); allowableMovement — 포인트 단위의 최대 손가락 이동(기본값 10, 떨리는 손에 도움이 되도록 증가 가능). iOS는 멀티터치 제스처를 위한 numberOfTouchesRequired를 지원합니다(예: 두 손가락으로 길게 누르기). 인식기는 UIContextMenuInteraction과도 통합됩니다 — UIContextMenuConfiguration을 통해 UIView에 컨텍스트 메뉴가 추가되면 Long Press가 수동 제스처 구현 없이 자동으로 컨텍스트 메뉴를 호출합니다.

Android의 Long Press: setOnLongClickListener

setOnLongClickListener는 Android SDK의 View 메서드로, 길게 누르기 리스너를 설정합니다. 사용자가 View를 500ms 이상 길게 누르면 시스템이 onLongClick()을 호출합니다. 메서드는 boolean을 반환합니다 — true는 이벤트가 처리되어 더 이상 전파되지 않아야 함을 의미하고, false는 이벤트가 다른 리스너에 의해 처리될 수 있음을 의미합니다. 더 복잡한 처리(Long Press 시작 후 손가락 움직임)를 위해 OnGestureListener와 함께 GestureDetector가 사용됩니다.

kotlin
// 햅틱 피드백을 포함한 setOnLongClickListener 예제
val itemView: View = findViewById(R.id.itemView)

itemView.setOnLongClickListener {
    // 제스처 시작 확인을 위한 촉각 응답
    it.performHapticFeedback(
        HapticFeedbackConstants.LONG_PRESS
    )

    // 요소 위치에 컨텍스트 메뉴 표시
    val popup = PopupMenu(this, it)
    popup.menuInflater.inflate(R.menu.context_menu, popup.menu)
    popup.show()

    true // 이벤트 처리됨
}

GestureDetector는 제스처에 대한 더 세밀한 제어를 제공합니다. setOnLongClickListener와 달리 GestureDetector는 시작(onLongPress), 이동(onScroll) 및 놓기에 대해 알립니다. 이를 통해 복잡한 시나리오가 가능합니다 — 예를 들어, 길게 누른 후 드래그 시작(Drag-and-Drop). OnGestureListener는 6개의 메서드 구현이 필요합니다: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling.

길게 누르기가 사용되는 곳

Long Press는 수십 가지 모바일 인터페이스 시나리오에서 사용됩니다. 가장 일반적인 응용 프로그램은 컨텍스트 메뉴입니다: 연락처를 길게 누르면 통신 옵션(전화, 메시지, 이메일)이 표시되고, 파일에서는 옵션(복사, 이동, 삭제), 텍스트에서는 선택 및 클립보드가 표시됩니다. Android Launcher는 앱 이동 및 위젯 추가를 위해 아이콘을 길게 누르는 방식을 사용합니다.

텍스트 선택은 두 플랫폼 모두에서 Long Press의 전형적인 예입니다. iOS에서 텍스트를 길게 누르면 커서 위치 지정을 위한 돋보기가 활성화되고, 단어 위에서는 핸들과 함께 선택됩니다. Android에서 길게 누르면 전체 단어가 선택되고 작업 표시줄(복사, 잘라내기, 붙여넣기)이 나타납니다. 두 플랫폼 모두 핸들을 드래그하여 선택 영역을 확장합니다.

미리보기 — iOS에서 Safari의 링크나 Mail의 메시지를 길게 누르면 콘텐츠 미리보기(peek)가 열립니다. Android에서는 알림을 길게 누르면 유사한 동작이 구현됩니다(작업 버튼과 함께 알림 확장). 사진 앱은 빠른 이미지 미리보기를 위해 썸네일을 길게 누르는 방식을 사용합니다.

드래그 앤 드롭은 종종 Long Press로 시작됩니다. 사용자가 요소를 길게 누르면 시스템이 드래그 모드로 전환되고 손가락 움직임에 따라 요소가 화면에서 이동합니다. Android는 Long Press 후 View.startDragAndDrop()을 통해 이 시나리오를 지원합니다. iOS는 UIDragInteraction을 사용하며, 드래그 상호작용을 시작하려면 길게 누르기가 필요합니다.

Long Press 사용 권장 사항

두 플랫폼의 Human Interface Guidelines은 명확한 권장 사항을 제공합니다: Long Press는 항상 보조 작업이어야 합니다. 중요한 기능을 수행하는 유일한 방법으로 길게 누르기를 사용하지 마십시오. 사용자는 먼저 Tap을 시도합니다 — Tap이 예상대로 작동하지 않으면 실망합니다. 시각적 단서를 추가하세요: 컨텍스트 메뉴는 점 세 개 아이콘으로 표시하고, Long Press를 지원하는 요소는 터치 시 시각적 힌트로 표시할 수 있습니다.

햅틱 피드백은 Long Press에 필수적입니다. 제스처가 인식되면 장치는 촉각 응답으로 이를 확인해야 합니다: iOS에서는 가벼운 임펄스의 UIImpactFeedbackGenerator, Android에서는 HapticFeedbackConstants.LONG_PRESS입니다. 햅틱 피드백이 없으면 사용자는 제스처가 등록되었는지 확신할 수 없어 다시 눌러 원치 않는 작업을 유발할 수 있습니다.

권장 사항iOSAndroid
인식 타임아웃0.5~0.65초500ms(기본값)
햅틱 피드백UIImpactFeedbackGeneratorHapticFeedbackConstants.LONG_PRESS
시각적 피드백컨텍스트 메뉴, 하이라이트PopupMenu, 리플 애니메이션
접근성VoiceOver + Custom ActionsTalkBack + AccessibilityNodeInfo
최대 손가락 이동allowableMovement = 10ptTouchSlop(~8dp 기본값)
스크롤 충돌cancelsTouchesInView = delayedonInterceptTouchEvent + LongPress

접근성: 모든 사용자가 길게 누르기를 수행할 수 있는 것은 아닙니다(운동 장애가 있는 사람, 노인 사용자). 항상 Long Press 작업에 접근할 수 있는 대체 방법을 제공하십시오 — 예를 들어, 인터페이스의 "더 보기" 버튼이나 시스템 접근성 기능(iOS의 VoiceOver, Android의 TalkBack)을 통해. iOS의 경우 UIAccessibilityCustomAction을 통해 사용자 지정 작업을 추가할 수 있으며, VoiceOver 로터를 통해 사용할 수 있습니다.

자주 묻는 질문

Long Press의 표준 누르고 있는 시간은?

Long Press의 표준 시간은 두 플랫폼 모두 0.5초(500ms)입니다. iOS는 minimumPressDuration을 0.3~1.0초까지 구성할 수 있습니다. Android는 View.setOnLongClickListener에 대해 고정 500ms 타임아웃을 사용합니다. 운동 능력이 제한된 사용자의 경우 타임아웃을 0.8~1.0초로 늘리는 것이 좋습니다.

Long Press와 3D Touch의 차이점은?

Long Press는 누르고 있는 시간(0.5초)으로 인식되고, 3D Touch는 압력(그램 단위)으로 인식됩니다. 3D Touch는 iPhone 6S~XR에서만 사용 가능합니다(하드웨어 Force Touch 기술). iOS 13부터 Apple은 3D Touch를 Haptic Touch로 대체했습니다 — 햅틱 피드백과 함께 Long Press를 통해 작동하는 소프트웨어 시뮬레이션입니다. Haptic Touch는 모든 최신 iPhone 및 iPad에서 사용할 수 있습니다.

Long Press와 스크롤(ScrollView) 충돌을 피하는 방법은?

Long Press와 스크롤 간의 충돌은 일반적인 문제입니다. 해결 방법: iOS에서 제스처 인식기에 delaysTouchesBegan = true를 설정합니다(시스템이 touchesBegan을 즉시 보내지 않고 제스처 인식을 기다림). Android에서는 Long Press에 대해 false를 반환하는 onInterceptTouchEvent를 사용합니다. 사용자가 타임아웃 전에 손가락을 움직이기 시작하면 스크롤을 위해 제스처가 취소됩니다.

웹 애플리케이션(PWA)에서 Long Press를 사용할 수 있나요?

네, Long Press는 웹 애플리케이션에서 지원됩니다 시간 측정과 함께 touchstart/touchend 이벤트를 통해. 최신 브라우저는 모바일 장치에서 길게 누를 때 발생하는 contextmenu 이벤트도 지원합니다. 브라우저 간 호환성을 위해 hammer.js와 같은 라이브러리를 사용하거나 touchstart 핸들러에서 setInterval을 통해 사용자 지정 인식기를 구현하십시오.

iOS에서 Long Press에 햅틱 피드백을 추가하는 방법은?

iOS에서 햅틱 피드백은 UIImpactFeedbackGenerator를 통해 추가됩니다. UILongPressGestureRecognizer가 began 상태로 전환되는 순간 impactOccurred()를 호출하십시오. 가벼운 응답을 위해 UIImpactFeedbackGenerator(style: .light)를 사용하십시오. 더 눈에 띄는 응답을 위해 — .medium을 사용하십시오. 컨텍스트 메뉴의 경우 iOS는 추가 코드 없이 UIContextMenuInteraction을 통해 자동으로 햅틱 피드백을 추가합니다.

요약

  • Long Press — 보조 작업을 호출하기 위해 0.5~1초 동안 화면에 손가락을 유지하는 제스처
  • Tap과의 차이 — Tap은 즉각적(기본 작업), Long Press는 타임아웃 필요(보조 작업)
  • iOS API — minimumPressDuration 및 allowableMovement 매개변수가 있는 UILongPressGestureRecognizer
  • Android API — View.setOnLongClickListener 및 GestureDetector.OnGestureListener
  • 용도 — 컨텍스트 메뉴, 텍스트 선택, 미리보기, 드래그 앤 드롭 시작
  • 햅틱 피드백 — 사용자에게 제스처 인식을 확인하기 위해 필수
  • 접근성 — 항상 Long Press 작업에 대한 대체 접근 방식 제공

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기