https://developer.apple.com/design/human-interface-guidelines
iOS 개발을 공부하면서 알게 된 애플의 Human Interface Guidelines 문서, 줄여서 HIG(히그)라고도 불리는 이 문서는 어떻게 하면 더 유저 친화적인 인터페이스를 만들어나갈 수 있을지에 대한 애플의 오랜 고민의 결정체가 담겨있는 문서가 아닌가 합니다. 실제로 강사 분은 "이 문서만큼은 아직 다른 플랫폼에서 따라오지 못하는 영역"이라고 말할 정도로 높게 평가하기도 했는데요. 문서의 상당 부분이 애플 플랫폼을 대상으로 쓰여져 있지만, 일부 철학과 기초는 꼭 애플 플랫폼을 대상으로 개발을 진행하지 않더라도 한번쯤 읽어두면 좋을 법한 내용들을 담고 있다고 생각이 들었습니다. 그래서 저도 아직 HIG 를 전부 다 읽지는 않았지만, 소개도 할 겸 공부하면서 접하게 된 내용을 엮어서 기록으로 남겨두려고 해요.
UIKit 프레임워크를 활용해 Alert 기능을 구현해보기 위해 다음과 같은 코드를 작성했습니다.
private func 알럿띄우기() {
let alert = UIAlertController(title: "", message: "알럿 메시지는 여기에", preferredStyle: .alert)
let yesAlertAction = UIAlertAction(title: "예", style: .default, handler: { _ in
self.showNavigationView()
})
let noAlertAction = UIAlertAction(title: "아니오", style: .cancel)
alert.addAction(yesAlertAction)
alert.addAction(noAlertAction)
present(alert, animated: true)
}
알럿컨트롤러를 하나 생성해주고, 여기에 addAction() 메서드로 "예", 또는 "아니오"를 추가해주었습니다. 이때 UIAlertAction을 생성해주면서 style에 전달인자로 .default, .cancel 과 같이 지정해줄 수 있는데요.
흥미로운 점은 .default 이냐 .cancel 이냐에 따라 버튼의 위치가 조정된다는 점입니다.
분명 순서 상으로는 "예"를 먼저 추가해주었기 때문에 순서대로 떠야할 것 같은데 .cancel 인 경우에는 위치가 자동으로 조정되어 나타나는 것을 알 수 있었습니다. 처음에는 공식문서의 예시코드대로만 따라갔어서 이렇게 순서가 바뀌는 줄은 몰랐었는데, .cancel 이 더 맞는 선택일 것 같아 변경해 주었더니 위와 같은 상황에 마주하게 된 것이었죠.
여러 문서를 뒤지다가 HIG 에서 이 기능에 대한 근거를 찾을 수 있었습니다. HIG 링크
Place buttons where people expect. In general, place the button people are most likely to choose on the trailing side in a row of buttons or at the top in a stack of buttons. Always place the default button on the trailing side of a row or at the top of a stack. Cancel buttons are typically on the leading side of a row or at the bottom of a stack.
사람들이 가장 많이 활용할 법한 버튼을, 한줄로 나열하는 경우엔 오른쪽에(좀 더 정확히는 trailing side), 스택으로 나열하는 경우엔 제일 위에 두라는 것입니다. 특히 Cancel 버튼은 보통 leading side of a row 에 위치한다고 되어있죠.
HIG 를 살펴보다 보면 '뭐 이런 것까지?' 라는 생각이 들 정도로 꽤나 구체적인 부분들까지 짚어낸 내용들을 종종 마주할 수 있습니다. 위에 소개한 Cancel 버튼이 왼쪽에 위치하는 것도 비슷한 예일 것 같아요.
물론 누군가는 이런 세세한 가이드라인이 오히려 제약사항에 가깝다는 생각을 하게 될 수도 있다고 생각하지만, 이런 내용 덕분에 애플의 사용자들은 서로 다른 앱을 사용하더라도 비슷한 인터페이스를 경험하고 새로운 앱에 금방 익숙해질 수 있는게 아닌가 싶습니다.