생명주기 (1) [ iOS 앱 생명주기, Scene 생명주기 ]
·
iOS/UIKit
이번 학습부터는 iOS의 여러가지 생명 주기를 학습해보자. 처음은 가장 큰 생명주기인 Scene과 App의 생명주기에 해당되는 단계와그 단계에 포함되는 콜백함수들을 짝지어 학습해보자.App Life CycleiOS 12 이하 버전에서는 scene을 지원하지 않기 때문에 UIkit의 모든 life-cycle 관련 이벤트들은UIApplicationDelegate 객체에서 처리한다. 1. Not Running앱이 실행되지 않았거나 완전히 종료되어 동작하지 않는 상태 // 앱 최초로 실행할 코드 작성// 앱 실행 준비가 끝가지 직전에 호출 // main storyboard 또는 nib 파일이 로드된 후// 실행된 후 InActive 상태가 된다.func application( _ application: ..
UIResponder Chain
·
iOS/UIKit
챌린지 때 간단하게만 보고 지나간 iOS에서 이벤트 처리하는 과정을 다시 한번 학습해보자. 처음은 각 과정에서 등장하는 구성요소의 개념부터 학습해보자.1. UIEvent앱에서 하나의 유저 인터렉션을 설명하는 객체  앱은 touch, motion, remote-control 과 같은 여러 타입의 이벤트를 받는다.이러한 이벤트는 type 와 subtype의 프로퍼티를 통해서 타입을 결정할 수 있다.유저 인터렉션이 type과 subTpye을 통해서 분류되는 것을 확인할 수 있다. 실제로 type에는 touches, motion , remoteControl, presses 등이 있으며,subType에는 motion, remoteControl의 이벤트를 조금 더 세분화 해서 분류한 것을 확인할 수 있다. 여러개의..
객체 지향 프로그래밍 (2) [ S.O.L.I.D ]
·
CS/객체지향
오늘은 객체 지향 프로그래밍 설계 원칙인 S.O.L.I.D 원칙에 대해 알아보자  SOLID란?SOLID 원칙들은 결국 클래스 내부 응집도는 높이고, 타 클래스들 간 결합도는 낮추는 High Cohesion(응집도) - Loose Coupling(결합도) 원칙을 객체 지향의 관점에서 도입한 것이다. 1) S - 단일 책임원칙 (SRP, Single Responsibility Principle)하나의 클래스는 단 하나의 책임만 가져야한다를 정의하는 원칙이다.위의 다이어그램을 한번 살표보자 왼쪽에 Person이라는 클래스 안에 나이, 이름, 혈액형 ~ 개발언어, 커리어까지 모두 모아 놨을 때 이 Person의 모든 특징을 만족하는 사람은 환자이면서 개발자인 사람 밖에 없다. 그렇다는 것은 개발자면서 환자인 ..
객체 지향 프로그래밍 (1) [ 개념, 특징 ]
·
CS/객체지향
오늘은 객체 지향 프로그래밍의 여러가지 개념 , 특징을 차례대로 학습해보자. 객체 지향이란?프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체 로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 구성 요소 1) 클래스 객체(object)를 생성하기 위한 설계도이다.어떤 동작이 있는지, 어떤 변수를 갖고 있는 지 미리 명시해두는 역할을 한다. 2) 인스턴스 클래스는 집에 필요한 공통적인 내용들이 들어있는 집의 설계도 (공통분모) ,인스턴스는 설계도 의 실질적인 값을 갖고 있다. 인스턴스는 힙 영역에 할당된다.  3) 객체 객체란 인스턴스 + class를 포함하고 있는 개념으로 객체 지향 프로그래밍에서 의미있는 작은 단위를 담당한다.마치 큰 집을 지을 때 필요한 블럭..
디스패치 학습하기 (4) [ Extension Dispatch ]
·
Programing Langauge/swift
이번 학습은 extension에서 동작하는 dispatch를 알아보자.extension을 할 수 있는 3가지 경우는 다음과 같다.값 타입에서 확장래퍼런스 타입에서 확장프로토콜에서 확장각 각의 상황에서 어떤 디스패치가 동작하는 지 알아보자. Value Type 확장 시 Dispatch상속의 가능성이 없기 때문에, 확장(exension)을 해도 Static Dispatch로 동작한다. struct Human { func sayHello() { print("Hello Human!") }} extension Human { func sayHo() { print("Ho~~") }} let human: Human = .init()human.sayHello() ..
디스패치 학습하기 (3) [ Value Type Dispatch, Protocol Dispatch ]
·
Programing Langauge/swift
이번에는 단순한 값 타입과 프로토콜을 이용 했을 때 동작하는 Dispatch를 알아보자 Value Type에서의 DispatchValue Type인 구조체, 열거형은 상속을 할 수 없다는 특징 때문에 오버라이딩이 될 가능성이 없고, 따라서 Static Dispatch 를 사용한다 Protocol에서의 Dispatch프로토콜은 기본적으로 메서드의 선언부만 제공하기 때문에 실제 사용할 때 프로토콜 타입을 참조로만 사용할 경우 해당 인스턴스에 맞는 메서드를 호출해야하므로 Dynamic Dispatch를 사용한다.  두개의 struct가 Human 프로토콜을 채택했지만 왼쪽은 값타입인 구조체를 이용했기 때문에 Static Dispatch가 이루워지고 오른쪽은 프로토콜을 타입을 사용했고 해당 인스턴스 타입에 맞..