UIResponder Chain
·
iOS/UIKit
챌린지 때 간단하게만 보고 지나간 iOS에서 이벤트 처리하는 과정을 다시 한번 학습해보자. 처음은 각 과정에서 등장하는 구성요소의 개념부터 학습해보자. 1. UITouch가장 간단한 이벤트인 터치 이벤트 객체를 먼저 살펴보자. 일단 터치를 하면 iOS는 UITouch라는 인스턴스를 만들어낸 후, 특정 View에 종속되며 Touch가 종료되는 시점에서 사라진다. 여기서 특정 View는 아마 터치 이벤트를 받은 View로 추측된다.  아래 표를 보면 각 이벤트에 해당되는 first Responder를 정리해 놓은 자료가 있다.first Responder는 아래에서 설명할테니 어떤 느낌인지만 보자.이벤트 종류First ResponderTouch events터치가 발생한 뷰Press events포커싱된 객체Sh..
객체 지향 프로그래밍 (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 ]
·
프로그래밍언어/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 ]
·
프로그래밍언어/swift
이번에는 단순한 값 타입과 프로토콜을 이용 했을 때 동작하는 Dispatch를 알아보자 Value Type에서의 DispatchValue Type인 구조체, 열거형은 상속을 할 수 없다는 특징 때문에 오버라이딩이 될 가능성이 없고, 따라서 Static Dispatch 를 사용한다 Protocol에서의 Dispatch프로토콜은 기본적으로 메서드의 선언부만 제공하기 때문에 실제 사용할 때 프로토콜 타입을 참조로만 사용할 경우 해당 인스턴스에 맞는 메서드를 호출해야하므로 Dynamic Dispatch를 사용한다.  두개의 struct가 Human 프로토콜을 채택했지만 왼쪽은 값타입인 구조체를 이용했기 때문에 Static Dispatch가 이루워지고 오른쪽은 프로토콜을 타입을 사용했고 해당 인스턴스 타입에 맞..
디스패치 학습하기 (2) [ Reference Type Dispatch, final ]
·
프로그래밍언어/swift
Reference Type에서의 Dispatch대표적으로 class는 상속 가능성이 있다. 따라서 서브 클래스에서 함수를 호출할 수 있기 때문에 이 때 Dynamic Dispatch를 사용한다. 아래 코드는 다음과 같은 구조를 같는다.  여기서 cat은 Animal(상위) 타입으로 되어있지만 Cat 인스턴스를 업캐스팅해서 가르키고 있는 상황이다.이때는 Animal의 speak를 참조해야하는 것이 아니라 Cat의 speak를 참조해야한다.이처럼 오버라이딩의 가능성이 있으면 어떤 함수가 실행되야할지는 런타임 때 알 수 있기 때문에 vtable을 무조건 참조해야하고 이런 동작을 Dynamic Dispatch라고 부른다. 그렇다면 상속으로 인한 오버라이딩의 가능성이 Dynamic Dispatch를 야기한다면 상..