[부스트코스]iOS 프로그래밍 강좌에 대한 정리글입니다.
[부스트코스]iOS 프로그래밍 Booster 2기 활동 글입니다.
디자인 패턴
프로그래밍에서 디자인 패턴이란 말이 등장하게 된 계기는 디자인 패턴이라는 책이 등장한 후부터 입니다. 이 책은 객체지향을 위한 23개의 패턴에 대해 기술하고 있습니다.
한글 번역본 도 있습니다.
이 책의 저자에 따르면, 디자인 패턴이란 특정한 상황에서 일반적 설계문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스에 대한 설명입니다. 쉽게 말하면 소프트웨어를 개발할 때 경험적으로 자주 사용하는 좋은 패턴들을 모아둔 것이라고 할 수 있습니다.
디자인 패턴은 개발자들이 협력하여 작업할 때 더 원활하게 작업할 수 있도록 합니다. 또 패턴은 대부분 전문가들에 의해 검증되었으므로 개발 시간과 비용이 줄어듭니다. 그리고 패턴의 이름만으로도 구조를 짐작할 수 있기때문에 코드 재사용에 있어서 효율적입니다.
디자인 패턴의 분류
이 책에서 디자인 패턴은 크게 목적과 범위로 나눌 수 있습니다.
목적은 패턴이 무엇을 하는 지 정의하는 것입니다. 생성, 구조, 행위 중에 한 가지를 가집니다. 생성은 객체의 생성 과정에 관여하는 패턴이고, 구조는 클래스나 객체의 구성에 관여하는 패턴이며, 행위는 패턴을 클래스에 적용하는지 객체에 적용하는지에 따라 구분되는 패턴입니다.
범위는 패턴을 클래스에 적용하는지 객체에 적용하는지에 따라 구분하는 패턴입니다. 목적에서 이야기한 행위와 비슷합니다. 범위에는 클래스 패턴과 객체 패턴이 있습니다. 클래스 패턴은 클래스와 클래스 사이의 관계를 다루는 패턴이며, 객체 패턴은 객체와 객체 사이의 관계를 다루는 패턴입니다.
디자인 패턴에는 싱글톤 패턴, 퍼사드 패턴, 옵저버 패턴 등이 존재합니다.
MVC
여러가지 디자인 패턴들 중, iOS 개발에는 MVC 패턴이 사용됩니다. MVC(Model-View-Controller) 패턴이란 어플리케이션 객체를 모델, 뷰, 컨트롤러의 3가지 역할 중 하나로 구분하여 서로 통신하며 동작하도록 하는 방식입니다. 이 방식은 뷰를 재사용하기 쉽게 하고, 데이터 흐름이 정상적으로 되도록 돕습니다.
모델 객체
모델은 데이터를 캡슐화하고, 데이터를 처리하는 로직을 담당합니다. 그 외의 뷰나 인터페이스에는 절대 관여할 수 없습니다. 모델 클래스를 구현할 때는 다음과 같은 사항을 고려해야 합니다.
인스턴스 변수는 어플리케이션 내에서 데이터를 캡슐화하고 유지하기 위해 사용됩니다. 이때 인스턴스 변수의 타입을 적절하게 고려해야합니다.
접근자 메서드는 인스턴스 변수를 설정하거나 획득할 때 사용됩니다. 보통 get 메서드와 set 메서드로 알려져 있습니다. swift
에서 인스턴스가 pirvate 또는 fileprivate 으로 선언되어 있는 경우 단순히 변수로는 값에 접근할 수 없습니다. 이 경우 접근자 메서드를 통해 값에 접근해야합니다.
키-값 코딩은 클라이언트가 프로퍼티 이름을 키로 설정하여 해당 프로퍼티에 접근할 수 있도록 하는 매커니즘입니다. 접근자 메서드의 이름을 지정하거나 암시적으로는 프로퍼티의 이름을 지정해서 사용해야합니다.
대부분 모델 클래스는 초기화 메서드를 통해 인스턴스 변수의 값을 적절하게 설정합니다. 이 때 초기화 메서드의 표준 형식을 따라야 합니다. 반대로 인스턴스 변수의 값을 할당 해제하기 위해서는 deinit 메서드를 통해 해제할 수 있습니다.
모델 클래스의 객체를 저장하는 경우, 인스턴스 변수를 인코딩하거나 디코딩할 수 있습니다.
클래스가 모델 객체를 복사하는 가능성이 있는 경우 클래스에서 객체 복사를 구현해야합니다.
뷰 객체
뷰는 어플리케이션에서 사용자가 볼 수 있는 것을 관리합니다. 뷰 객체는 모델의 데이터를 보여주거나 편집할 수 있도록 합니다. 즉 화면에 어떻게 나타날지, 사용자의 동작에 어떻게 반응할지를 결정합니다.
컨트롤러 객체
컨트롤러 객체는 뷰와 모델 사이에 중개자 역할을 합니다. 뷰에서 이루어지는 동작을 해석하고, 변경되는 값들을 모델에 전달합니다. 반대로 모델의 값들을 뷰에 전달하기도 합니다. 또 객체들의 라이프사이클을 관리하기도 합니다. 코코아 터치 프레임워크에서는 2가지 유형의 컨트롤러 유형을 제공합니다.
뷰 컨트롤러는 콘텐츠를 화면에 표시하는 뷰를 관리합니다. 뷰의 전환이나 동작에 관여하고, 방향에 따라 뷰를 회전시키기도 하며, 메모리 부족과 같은 경고에 응답하기도 합니다. UIViewController 클래스의 인스턴스로 구현되어 있습니다.
코디네이팅 컨트롤러(Coordinating Controller)라는 것도 존재합니다. 이것은 어플리케이션 전체나 일부 기능들을 감독합니다. 객체의 라이프사이클을 관리하고, 객체 간 연결을 수행하고, 사용자의 동작을 처리하며, 알림을 관리합니다.
[다음 포스트] 내비게이션 인터페이스에 대해 알아보고 직접 구현해보기