한달간 진행되었던 패스트캠퍼스 갓생살기 챌린지를 마무리하면서 소감을 정리해본다.
처음에는 Motivation이 높았기에 한달동안 전체 강좌를 마무리할 수 있을 줄 알았으나 생각보다
매일매일 강의를 듣고 정리를 하는 것이 쉽지만은 않았다.
내가 들었던 강좌는 앱만들기 강좌이기 때문에 전체 앱을 만들었더라면 6개 정도가 됐을 것이다.
이만큼은 만들지는 못했으나 적어도 앱을 만들기 위해서 필요한 스킬이나 관련 지식은 습득할 수 있었다.
물론 나머지 강좌도 챌린지와 관계없이 전부 진행할 예정이다.
가장 처음 만들었던 앱은 현상금 앱이었다.
여기서 배웠던 건 앱을 만들기 위해서는 ViewController가 필요하고, 여기에 텍스트, 라벨, 버튼 등을
배치해서 화면을 꾸밀 수 있었던 것이다. 프로그래밍을 처음 배울때 의례 등장하는 Hello, World 수준의
앱이라고 볼 수 있다. 그렇더라도 무시할 수 없는게 아이폰을 준비하고 내가 만든 앱을 넣고 실행을 하면,
짜잔하고 원하는 대로 동작하는 것을 볼 수 있단 것이다.
무언가를 만드는 것을 배우고 그것을 따라했을 때 원하는 대로 동작을 하면 희열을 느낄 수 있다.
정말 누가 봐도 간단한 작업이지만 첫걸음을 떼는 건 쉽지만은 않은 일이다.
내부적으로 뭐가 어떻게 돌아가는지는 잘 몰라도 내가 만든 코드가 화면을 통해서 나에게 말을 거는 느낌을
받을 수 있었다.
개발자에게는 평판이 좋지않은 xcode이기는 하나 화면을 배치하고 드래그를 몇번 함으로써 코드와 뷰가
연결되는 점은 굉장히 편리했다. Ctrl을 누른채로 ViewController 파일에 드래그를 해서 Outlet과 Action등을
연결을 할 수 있었다. 이를 통해서 실제 화면에 위치한 컴포넌트의 외양과 동작을 제어할 수 있다.
아이폰과 아이패드마다 화면의 크기와 해상도가 달라서 이를 보정해주기 위한 기능도 존재한다.
그것은 바로 오토레이아웃이다. 뭔가 이름 자체는 딱히 멋스럽지는 않지만 사용자 경험의 만족을 위해서는
꼭 숙지해야 하는 기능이다. 개발자로서 이부분이 제일 어려운 일이라고 생각된다. 그저 키보드만 두드리고
코드를 입력해서 앱이 동작하는 걸 보고 싶은데 화면 설계가 제대로 되어 있지 않으면 전혀 엉뚱한 화면만
나오게 되어서 신경써서 배치를 해줘야 한다. 강좌내내 컴포넌트를 배치하면 꼭 오토레이아웃부터 설정하라는
내용을 반복하였다. 귀찮은 일은 처음에 해결해야 나중에 문제가 안 생기는 것이다.
다행히도 xcode는 ctrl + 드래그 드롭으로 쉽게 오토레이아웃을 다룰 수 있다.
애플이 xcode외에 다른 ide를 잘 못쓰게 한 점은 맘에 안들지만 xcode의 사용성을 높이려 한 점은
높게 평가할 만하다.
첫앱 이후에는 스위프트 문법에 대해서 진행이 되었다.
스위프트는 최신 언어인만큼 다양한 기능들을 가지고 있다. Swift Playground를 통해서 컴파일 언어임에도
불구하고 스크립트 언어들처럼 쉽게 실행을 할 수 있는 기능도 있다.
주석은 일반적인 //와 /* */를 모두 지원한다. 명시적 타입을 가지고 있는 언어이긴 하나 let을 통해서 선언을
하면 타입 추론을 지원하여 타입을 명시하지 않고도 어떤 타입인지 자동으로 설정해준다.
이런 부분은 모두 option을 누른채로 클릭을 하면 데이터 타입에 대한 정보를 볼 수 있었다.
for문의 경우는 …와 ..<등의 범위지정자를 지원하는데 이 부분은 반복문을 처리할때 굉장히 편리하다.
파이썬의 경우는 range를 통해서 이런 처리를 해야 하는데 스위프트는 언어레벨에서 범위를 탐색할 수 있다.
특히 switch문과 결합해서 사용을 하면 장점이 더 빛을 발한다. c++의 경우 case를 여러번 겹쳐써야 하는데
스위프트는 case 1…3 등을 이용해서 여려 조건을 한번에 검사할 수 있었다.
func 역시 파라미터에 alias를 붙일 수 있다는 점이 특이하다. 아무것도 붙이지 않으면 파라미터 이름을 명시하지
않고 지정된 순서대로 사용을 하고, 이름을 붙이면 외부 공개용과 내부 공개용을 구분할 수 있다. by, of 등의 전치사를
통해서 영어이름처럼 쓸 때 유용하다. 지금까지 써왔던 언어 중에 외부용과 내부용 파라미터 이름을 구분하는 언어는
없었던 것 같다. 파라미터 이름을 딕셔너리로 받는 것은 파이썬의 특징인데 스위프트는 그보다 더 나아간 방식을
채택한 듯하다.
옵셔널은 최근에 나온 언어들에 적극 채용되는 문법이다. C++이나 파이썬 역시도 Optional Class를 이용해서
구현을 할 수는 있다. 스위프트는 그보다 나아가서 언어자체에서 지원을 한다. ?나 ! 등의 예약어가 옵셔널을 다루기 위한
것들이다. 옵셔널은 처음에는 이해하기가 어려운 개념이었다. 박스를 가정하고 박스 안에 데이터가 있냐없냐를 고민해야
하는 것이다. 박스 안에 물건이 있는지 없는지부터 살펴보고 있으면 꺼내서 사용한다는 개념이다.
사실 자바에서 null point exception이 굉장히 짜증나는 에러 중에 하나인데 옵셔널을 이용하면 이 부분의 에러는 미연에
방지할 수가 있다. 에러를 마주하기 싫으면 항상 검사해서 사용하라는 강제성이 있는 방법이라고 생각된다.
앱개발에서는 대부분의 컴포넌트가 옵셔널 형태로 구현이 되어 있었다. 따라서 데이터를 넣거나 가져올때 항상 체크를 하는
불편함이 있지만 그 덕분에 안정성이 보장이 되었다.
스위프트의 콜렉션 역시도 특징이 있다. 다른 언어에서도 항상 등장하는 Array와 Dictionary가 그것이다.
Array는 순서가 있는 값들을 저장하는데 유용하고, 스택으로도 쉽게 사용할 수가 있다. 항상 뒤쪽에 데이터가 들어오기 때문에
뒤에서 넣고 빼는 건 복잡도가 낮은 것이다. 딕셔너리는 파이썬이나 다른 언어에서 사용하는 딕셔너리와 같다.
자료구조에서는 해쉬테이블과 같은 방식으로 키를 알면 값에 접근하는 건 상수시간에 가능하다.
추가적으로 Set 타입이 있는데 이는 키가 그자체로 값 역할을 하는 딕셔너리와 같다고 생각하면 된다.
각각의 값이 유일하게 존재하고 중복되는 값들은 하나로 처리하게 된다.
익명 함수의 일종인 클로저도 배웠다. c++이나 파이썬의 람다 함수나 자바스크립트의 arrow function과 같은 내용이다.
함수의 이름없이 인자와 블럭만으로 함수를 정의하고 이를 callback등에 넘겨서 처리하게 하는 것이다.
다만 스위프트 클로저만의 특징이 있는데 함수 입력으로 들어가는 클로저가 마지막 인자 일 경우 함수 바깥에 정의할 수 있단 점이다.
자바스크립트는 콜백으로 익명 함수를 전달할때 함수밖에 괄호를 해야 하는 경우가 있어서 매우 지저분할 때가 있다.
스위프트는 클로저 자체를 밖으로 위치시켜서 이 부분을 보기 좋게 만들 수가 있다. 익숙해지면 코드 보기가 편한 방법이다.
스위프트의 구조체는 클래스보다 더 많이, 자주 쓰이는 개념이다. 프로퍼티를 설정하는 방법이 중요한데 get, set 지정자를
언어 자체적으로 지원을 해서 따로 함수를 만들지 않고도 get, set을 자체내에서 정의를 할 수 있게 만들었다.
computed property와 method의 구분은 강사님이 구분을 해서 어떤때에 사용하면 좋은지에 대해서도 표를 만들었다.
강의 중간중간에 이렇게 헷갈릴 수 있는 부분을 쉽게 구분을 할 수 있게 한 건 좋은 경험이었다.
뒤에 이어지는 강의 내용에서는 struct와 class의 비교도 진행이 되었다. 대부분의 경우는 struct를 쓰지만, 꼭 필요할때
class로 바꾸는 방법은 어렵지 않기 때문에 어떤때에 쓰면 좋을지에 대해서도 표를 통해서 설명을 해주었다.
클래스에 대해서는 항상 딸려오는 개념이 상속이기 때문에 상속에 대한 개념도 자세히 설명을 하고 넘어갔다.
특히 5가지 케이스에 대해서 상속을 하면 좋을 경우에 대해서 설명을 했는데 이는 강의에서 확인이 가능하다.
여기까지 길고 긴 스위프트의 기본 개념을 마무리하고 다시 앱을 만들게 되었다.
첫번째 앱은 맛보기였으므로 이제부터 본격적인 앱이라고 볼 수 있는데 원피스 현상급앱을 만들었다.
이번 앱을 만드는데 있어서 전체적인 개념은 Table View, Grid View, 프로토콜과 delegate 였다.
Table View를 추가했을 때 꼭 구현해야 하는 부분이 존재하는데 그 것이 Datasource와 Delegate이다.
이 부분은 모두 프로토콜로 추가가 되고 프로토콜을 구현을 해야 화면에 어떤 식으로 뿌려줄지 정해지는 것이다.
프로토콜은 어떤 서비스를 구현하기 위해 해야 할일이라고 생각을 해두면 되고, 항상 등장하는 개념이다.
그 다음 중요한 개념은 segueway이다. 화면을 클릭했을 때 어떤 화면으로 전환될지 정한 스토리라인이라고 보면
될 것이다. 새로운 뷰컨트롤러르 만들고 기존의 뷰컨트롤러에서 ctrl로 드래그를 하면 segueway를 만들 수 있다.
앱디자인에서 중요한 디자인 패턴도 설명하고 이를 실제로 적용하면서 코드를 수정하는 부분도 진행하였다.
에전에는 MVC 모델이 일반적이었으나 Controller에 가하는 부담이 커서 MVVM 모델로 전환한 얘기도 하게 되었다.
특히 모델들을 다른 클래스로 추출해서 기능의 변경에 유연하게 대처가 가능하게 하였다. 이러한 과정을 리팩토링이라고 하는데
개발하는데 있어서 아주 중요한 기법 중 하나이다. 처음에는 일단 동작하는 앱을 만들더라도 만든 후에 기능 추가나
변경 등이 발생하기 마련이다. 이를 위해서 구조가 바뀌는 등의 일이 발생하는데 문제가 없도록 변경 할 수 있어야 한다.
리팩토링을 거쳐서 프로그램을 유연하게 만들었기 때문에 현상금 앱을 리스트뷰에서 콜렉션뷰로 바꾸는게 가능할 수 있었다.
구조가 그대로였으면 이런 변경 과정이 쉽지 않았을 것이다. 요구가 어떻게 바뀔 수 있는지를 고려해서 프로그램을 처음부터
잘 작성하는 것도 중요하지만 중간에 변경할 수 있다는 내용을 배울 수 있었다.
마지막으로 끝까지 완성해 본 앱은 애플스타일 음악앱이었다.
여기서는 프로젝트에 추가된 mp3파일들을 다루고 AVPlayer를 이용해서 플레이 가능하게 만들었다.
친절하게도 template 코드를 제공해서 강좌에는 필요한 기능을 구현하는데만 집중할 수 있었다.
extesion을 이용해서 원래 없던 함수들을 구현을 하고 이를 통해서 앱에 사용할 수 있는 기능도 만들 수 있었다.
스크롤바의 seeking을 구현해서 스크롤을 움직일때 구간을 찾아서 플레이하는 기능들도 구현을 하였는데,
동작하는 모습을 보니 뿌듯함마저 느껴졌다.
처음 화면만 봤을때는 어떻게 구현을 하면 좋을지 막막함이 느껴졌는데 하나씩 따라가다 보니 완성되는 모습을 보면서
보람도 느끼게 되었다. 강의를 통해서 앱은 많이 구현을 못해보았으나 실제로 존재하는 앱과 비슷한 기능을 하는
앱을 구현하는 건 나도 이런 앱을 만들 수 있구나 하는 생각이 들어서 좋다.
이렇게 30일간의 여정이 진행이 되었다. 끝났다고는 말을 못하는게 아직도 한달 정도 더 들어야 강좌를 완료할 수 있을 것 같다.
매일매일 진행을 하는게 때로는 힘들고, 때로는 귀찮고 하지만 미션과 함께하다보니 이렇게 완료가 되었다.
처음에는 분명 금전적인 부분이 동기가 되기도 했지만 하다보니 개근하는 재미가 있어서 더 열심히 한 경험이었던 것 같다.
이글을 보는 다른 분들도 내년에는 꼭 맘에 드는 강좌를 들으면서 미션을 해보시길 바란다.
다음에 또 기회가 되면 또 다른 강좌를 찾아서 들을 것이다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #iOS앱개발올인원패키지