이 포스트에서는 부스트코스 iOS 프로그래밍 강좌 의 두번째 프로젝트를 수행하면서 얻은 정보들이나 코드 리뷰 내용에 대해 다루어 보겠습니다.
프로젝트의 목표
이 프로젝트의 목표는 회원가입 페이지를 구현하는 것입니다. Xcode
를 사용해서 사용자의 이름과 비밀번호, 그리고 그 외의 여러 정보들을 받아서 저장하면 됩니다. 프로젝트의 자세한 내용에 대해서는 여기 를 참조하시기 바랍니다.
이 프로젝트를 수행하기 위해서는 오토레이아웃이나 싱글톤 디자인 패턴, 모달 등 다양한 내용들을 알고 있어야 합니다. 부스트코스 강좌를 들으며 알고 있어야 하는 내용들을 정리해 보았습니다.
막혔던 부분과 해결한 방법
그러나 프로젝트를 수행하면서 막히는 부분들이 있었습니다. 도저히 어떻게 구현해야 제대로 기능할까하는 부분들이 존재했습니다. 그러나 검색과 검색을 통해 결국은 해결할 수 있었습니다.
NotificationCenter 사용하기
가장 처음 막혔던 부분은 서로 다른 뷰 컨트롤러 사이에서 어떻게 정보를 전달할까 하는 부분이었습니다. 프로젝트에서 “가입 버튼을 누르면 모든 정보를 저장한 후 처음화면으로 돌아온다. 이 때 처음화면의 ID 칸은 사용자가 기입했던 ID 로 채워져야 한다.” 라고 하는 부분이 있습니다. 간혹 웹사이트들 중에 회원가입을 끝내면 로그인 칸에 회원가입에 사용했던 ID 가 자동입력되어 있는 경우가 있는데 이를 iOS 로 구현하는 것입니다.
이런 느낌
문제는 가입 버튼이 3번째 뷰 컨트롤러에, 처음 화면은 1번째 뷰 컨트롤러에 있었다는 것입니다. 3번째 뷰 컨트롤러에 있는 버튼을 누르면 1번째 뷰 컨트롤러에 있는 텍스트필드에 정보가 들어가야 하는데 이를 어떻게 구현해야 해야하지하는 고민이 생겼습니다. 시간을 들여 해결방법을 찾던 중 다음 포스트를 찾을 수 있었습니다.
이 포스트는 NotificationCenter 라는 메카니즘에 대해 다루고 있습니다. 서로 다른 클래스에서 일종의 알림을 보내고 받는 방식을 이야기하고 있습니다. 저는 이를 응용해서, 3번째 뷰 컨트롤러의 버튼에서 알림을 보내면 1번째 뷰 컨트롤러의 텍스트필드에서 정보를 입력하는 것을 구현하기로 하였고 다행히 성공적으로 동작했습니다.
비활성화된 버튼
의외로 시간을 빼앗긴 부분도 있습니다. 바로 버튼을 비활성화하는 부분입니다. 프로젝트에서 “모든 정보가 기입되지 않으면 버튼이 비활성화되어 있어야 한다.” 하는 부분이 존재합니다. 다음 코드를 사용하면 됩니다.
isEnabled 라는 프로퍼티는 true 또는 false 값을 가집니다. 이 값을 통해 버튼을 활성화하고 비활성화할 수 있습니다. 간단한 한 줄의 코드이지만 저는 처음에 이것이 버튼의 속성에서 설정하는 걸로 생각해서 Xcode
우측의 inspector 부분을 뚫어져라 쳐다봤습니다. 결국에는 구글 검색으로 쉽게 해결해 버린 것이 허무했던 기억이 있습니다.
전문가의 코드 리뷰
간단한 프로젝트지만 생각보다 신경써야 할 것이 많아서 시간이 좀 걸렸습니다. 그러나 결국 프로젝트를 수행할 수 있었고 원하는 결과를 만들었습니다. 그리고 전문가의 코드 리뷰를 통해 프로젝트에 대한 평가를 받을 수 있었습니다. 그 결과는 안타깝게도,
Fail 을 받았습니다. 찾아보니 3개의 부분에서 아쉽게도 불합격을 받았습니다. 어떤 부분이었는지 지금부터 다루어보도록 하겠습니다.
기능을 구현하지 않음
프로젝트의 요구사항 중 하나입니다. 사용자가 모든 정보를 기입해야 다음 버튼으로 이동할 수 있도록 해야 합니다. 그러나 전 알 수 없는 이유로 사용자가 유저이름과 비밀번호만 입력해도 다음으로 이동할 수 있도록 구현해 버렸습니다. 코드 리뷰가 없었다면 그냥 넘어갔을 수도 있는 큰 실수였습니다.
그래도 비교적 간단한 부분이었기 때문에 쉽게 수정할 수 있었습니다.
기능을 덜 구현함
어떻게 보면 두번째 실수입니다. imagePicker 를 이용해서 사용자의 라이브러리로부터 사진을 가져오는 기능을 구현해야 합니다. 이 기능은 이미 이전 포스트들 중 iOS 의 다양한 디자인 패턴 알아보기 1 에서 구현한 적이 있습니다.
그러나 해당 포스트에서 구현한 내용은 이미지를 가져와서 그대로 사용하는 것이었고, 여기서는 이미지를 사용자가 원하는대로 편집할 시 편집된 이미지를 사용하는 것이 추가되었습니다. 아쉽게도 해당 부분에서 코드를 완전하게 구현하지 않았습니다. 정확하게는 구현을 나름 하기는 했지만 시뮬레이터에서 해당 기능을 완전히 검사하지 못했고, Fail 을 받게 되었습니다.
싱글톤 디자인 패턴을 잘못 사용함
싱글톤 디자인 패턴도 이전 포스트에서 다룬 적이 있습니다. iOS 의 다양한 디자인 패턴 알아보기 2 에서 간단하게 다루었습니다. 그러나 아쉬운 것은 해당 패턴에 대해 자세히 다루지는 않았다는 것입니다.
싱글톤 디자인 패턴은 하나의 인스턴스를 만들어서 모든 객체가 사용할 수 있도록 하는 것입니다. 이 때 위의 평가에서처럼 싱글톤 인스턴스는 외부에서 새로운 객체를 생성할 수 없도록 해야 합니다.
이전에 제가 구현한 싱글톤 클래스는 다음과 같은 모습이었습니다.
여기에 private 키워드를 사용하여 initializer 를 선언해야 합니다. 그래야 외부에서 새로운 객체를 생성하는 것을 막을 수 있습니다. 다음과 같은 코드처럼 말입니다.
마무리
실제로 프로젝트를 해보며 iOS 프로그래밍에 익숙해질 수 있었고, 무엇보다 전문가분의 코드 리뷰덕분에 놓치기 쉬운 부분들을 찾을 수 있어서 학업에 도움이 되었습니다.