본문 바로가기

iOS82

Swift) MVC MVC 애플의 MVC를 알아보기 전, 전통적인 MVC에 대해 먼저 알아보겠습니다. Traditional MVC 이전 글에서 다룬 Distribution(역할 분배)가 전통적인 MVC에선 적용이 되지않은 모습입니다. 위의 다이어그램을 통해 전통적인 MVC는 Model, View, Controller가 서로 의존하고 있음을 알 수 있습니다. View는 사용자 액션을 Controller에게 전달하고, Controller는 이에 따른 업데이트를 Model에게 요청합니다. 그 후 Model은 값을 업데이트한 후 값의 변화를 View에게 알립니다. 이렇게 연결된 M, V, C는 서로의 존재를 잘 알고있고, 상호간의 의존성이 높습니다. 즉, 독립성이 현저히 떨어져 각각의 재사용성이 떨어집니다. 독립성이 떨어졌다고 재.. 2022. 2. 12.
왜 디자인 패턴을 중요시 여기는가? 왜 디자인 패턴을 중요시 여기는가? 아직 디자인 패턴에 대해 문외한이지만 디자인 패턴을 하나하나 공부해보기 전에 "왜 디자인패턴을 중요시 여기는건가?" 라는 것을 공부하는 것이 맞다고 생각하였습니다. 그래서 여러 곳을 참고하던중 좋은 블로그를 발견하여 정리해보려합니다. 디자인 패턴이 프로그램을 작성할 때 필요한 이유와, 적용 후 효과들을 먼저 알아보고자 합니다. 여러 디자인 패턴이 있지만, 꼭 디자인 패턴에 맞게 코드를 짜지않았다고, 프로그램이 동작을 하지않거나, 제기능을 하지 못하는 것은 아닙니다. 하지만 이같은 프로그램은 가독성이 현저히 떨어지고, 디버깅과 테스팅, 유지보수 등에 많은 비용이 필요할 것입니다. 그렇다면 좋은 구조의 특징은 무엇일까요? Balanced distribution 각 객체들의.. 2022. 2. 12.
Swift) Struct vs Class Struct - Value Type 구조체는 하나 이상의 프로퍼티를 묶어 새로운 타입을 정의하는 도구이다. [명명법 : 타입의 이름은 UpperCamelCase 를 사용하고, 내부 프로퍼티와 메소드는 LowerCamelCase를 사용한다.] struct Person { let name: String let age: Int func run() { // ... } } 구조체의 경우는 개발자가 직접 이니셜라이저를 생성하지 않아도, 자동적으로 생성된 멤버와이즈 이니셜라이저를 통하여 인스턴스 프로퍼티의 이름으로 자동 지정된다. struct Person { let name: String let age: Int func run() { // ... } } let jiseong = Person(name: "Jiseong.. 2022. 2. 12.
Swift) Notification, NotificationCenter Notification NotificationCenter를 통해 정보를 저장하기 위한 컨테이너이다. Notification을 post(전달)할 때 동기적으로 동작한다. NotificationCenter NotificationCenter에 등록된 observer에게 동시에 notification을 전달하는 클래스이다. NotificationCenter 클래스는 한 객체가 이벤트가 발생했다는 Notification을 전달(post)하면, NotificationCenter에서 등록된 옵저버에게 객체에서 발생한 이벤트를 보낸다. 해당 이벤트를 다루는 옵저버가 있다면, 미리 설정해놓은 처리로(이런 이벤트가 들어오면, 이렇게 처리해라) 이벤트에 대한 처리(콜백, 피드백)을 한다. .default = 앱 전체에 전역.. 2022. 2. 12.
Swift) Singleton Singleton 싱글톤은 특정 클래스의 인스턴스가 단 하나임을 보장하는 객체를 말한다. 싱글톤은 애플리케이션이 몇번을 요청하든 이미 생성된 동일한 인스턴스를 반환한다. 프로그램 전체에 단 하나의 전역 인스턴스를 만들어놓고, 어디서든 이 하나의 인스턴스만 접근, 사용할 수 있게 하면 된다. class SingleTonExample { static let shared = SingleTonExample() var testNumber: Int = 0 private init() { } // 객체 생성, 초기화 막음 } let test = SingleTonExample.shared test.testNumber = 10 // reference type (class) print(SingleTonExample.shar.. 2022. 2. 12.
Swift) KVO(Key-Value-Observing) KVO? (옵셔널 아님ㅋ) 다른 객체의 프로퍼티 변경사항을 객체에 알리기 위한 코코아 프로그래밍 패턴이다. NSObject를 상속받아야 사용할 수 있기때문에 상속이 되는 Class에서만 사용이 가능하다. observer와 observed는 일대일 관계, 일대다 관계가 가능하다. 모델과 뷰같은 논리적으로 분리된 관계간에 변경사항을 전달할 때 유용하다. Objective-C 런타임에 의존하는 방식이다. 그래서 clean swift 코드엔 지양한다. 타입 정의 밖에 observer를 추가하는 것 뺴곤 property observer(willSet, didSet)과 비슷하다. class Address: NSObject { var town: String { willSet { print(newValue) } did.. 2022. 2. 12.