모바일 앱 개발을 하다 보면, 어느 순간 단순히 ‘돌아가는 코드’를 짜는 것을 넘어 플랫폼의 설계 철학과 언어의 깊은 본질에 대한 갈증을 느끼게 됩니다. 저에게는 iOS와 Swift가 그랬습니다.

이 갈증을 해소하기 위해 전 세계 수많은 iOS 개발자들의 ‘바이블’로 통하는 Stanford University의 CS193P (Developing iOS Apps with Swift) 강의를 수강했습니다. 폴 헤가티(Paul Hegarty) 교수의 명강의를 따라가며 직접 구현했던 3개의 핵심 프로젝트와, 그 과정에서 배운 기술적 인사이트를 공유하고자 합니다.


1. 프로젝트 1: Calculator — Swift와의 첫인상

가장 먼저 시작한 프로젝트는 기본적인 계산기 앱(Calculator)이었습니다. 겉보기엔 단순하지만, 이 프로젝트의 진짜 목적은 MVC(Model-View-Controller) 패턴의 엄격한 적용에 있었습니다.

기술적 포인트

  • Optional의 이해: Swift가 다른 언어와 구분되는 가장 큰 특징 중 하나인 Optional 처리를 확실하게 체득할 수 있었습니다. 값이 없을 수 있는 상황을 안전하게 다루는 법을 배웠습니다.
  • Enum을 활용한 로직 분리: 연산 로직을 Enum으로 분리하여 코드를 구조화했습니다. 단순히 if-else 문을 나열하는 것이 아니라, 연산자의 성격(단항, 이항 등)에 따라 깔끔하게 분기 처리하는 방법을 익혔습니다.

회고: “Swift는 안전(Safety)을 최우선으로 하는 언어구나”라는 것을 깊이 실감했습니다. 컴파일러가 잡아주는 에러들을 수정해가며, 앱이 런타임에 죽는 것을 사전에 방지하는 Swift만의 철학을 느낄 수 있었습니다.


2. 프로젝트 2: Concentration — 데이터와 메모리 관리

두 번째 프로젝트는 같은 그림을 찾는 카드 맞추기 게임(Concentration)이었습니다. 이 단계에서는 시각적인 재미뿐만 아니라 앱의 뒷단에서 일어나는 효율적인 데이터 구조 설계에 집중했습니다.

기술적 포인트

  • Struct vs Class: 언제 참조 타입(Class)을 쓰고, 언제 값 타입(Struct)을 써야 하는지 명확한 기준을 세울 수 있었습니다. Swift에서는 Struct가 단순한 데이터 컨테이너 이상의 강력한 역할을 한다는 것을 배웠습니다.
  • Property Observer (didSet): 변수의 값이 변경될 때마다 UI를 자동으로 업데이트하거나 특정 로직을 실행하도록 하는 Property Observer 패턴의 편리함을 경험했습니다.

회고: 간단한 메모리 게임이지만, 그 뒤에 숨겨진 배열(Array)의 효율적인 관리와 상태 동기화가 얼마나 중요한지 깨달았습니다. 코드를 작성할 때 단순히 로직을 짜는 것을 넘어 메모리와 데이터의 흐름을 상상하게 되었습니다.


3. 프로젝트 3: PlayingCard — 아름다운 UI의 이면

세 번째는 트럼프 카드의 앞면과 뒷면을 커스텀하게 그려보는 프로젝트(PlayingCard)였습니다. 기본적인 UI 컴포넌트를 넘어서, 개발자가 직접 픽셀 단위로 통제하는 법을 배웠습니다.

기술적 포인트

  • 커스텀 드로잉과 @IBDesignable: UIView를 상속받아 직접 화면에 그림을 그리는 방식을 학습했습니다. 특히 @IBDesignable@IBInspectable을 활용해 코드로 작성한 UI가 스토리보드에 실시간으로 반영되는 경험은 무척 인상적이었습니다.
  • Core Graphics 활용: 단순히 이미지를 띄우는 것이 아니라, Core Graphics를 이용해 벡터 기반의 그래픽을 코드로 구현해 내는 방법을 배웠습니다.

회고: 코드로 직접 UI를 한 땀 한 땀 그려보며 느낀 성취감은 대단했습니다. 동시에 부드러운 애니메이션과 세밀한 UI 조정에 필요한 수학적 연산과 제약 사항들에 대해서도 깊이 고민해 보는 계기가 되었습니다.


마무리: 강의가 나에게 남긴 것

CS193P 강의를 수강하며 남긴 레포지토리들(Calculator, Concentration, PlayingCard)은 단순한 실습 결과물을 넘어 제 성장의 기록이 되었습니다.

이 강의는 단지 문법을 알려주는 것을 넘어, Apple이 어떤 철학으로 iOS와 Swift를 설계했는지 이해하게 해 주었습니다. 문서를 꼼꼼히 읽고 스스로 문제를 해결해 나가는 ‘엔지니어링 사고’가 확장되는 귀중한 시간이었습니다.

이제 막 Swift를 시작하시거나, 기존의 지식 위에 기본기를 더욱 탄탄하게 다지고 싶은 동료 개발자분들께 스탠포드 강의를 강력히 추천합니다!

작성된 코드들은 제 GitHub 레포지토리에서 확인하실 수 있습니다.