iOS/Swift 상식 30

Delegate 패턴 알아보기

Delegate라는 단어를 처음 만나면 되게 생소하다. Delegate는 대신해서 움직여주는 역할이다. protocol을 이용하여 다른 클래스에게 권한을 위임할 수 있다. (protocol은 내부에 method, property를 선언하고 protocol을 상속받는 곳에서 protocol stubs를 사용할 수 있다.) 아무튼 delegate는 구성해 놓은 작업들을 대신해 주는 역할이다. 한 줄로 끝나는 delegate지만 한 번에 이해하기 어렵다.. 쉽게 이해하기 위해서 예를 들어 살펴보자 내가 인기 있는 카페 여러 매장을 가지고 있는 사장이라고 가정해 보자. (상상만으로 즐겁네) 모든 카페에서 내가 직접 커피를 내리고 계산을 하는 것은 불가능하다. 따라서 아르바이트생이나 매니저들(대리자)을 구한 뒤 ..

iOS/Swift 상식 2023.02.04

Instance Method, Type Method

Instance Method 인스턴스 메서드는 특정 클래스, 구조체, 열거형 인스턴스에 속한 메서드를 의미한다. 흔히 우리가 알고 있는 함수들을 의미한다. Instance Method인 thisIsInstanceMethod를 접근해 보자 class JJ{ func thisIsInstanceMethod(){ print("hello") } } let jj: JJ = .init() jj.thisIsInstanceMethod() 해당 인스턴스 메서드에 접근하려면 클래스 JJ를 인스턴스를 생성하고 생성된 JJ인스턴스에.(dot)을 통해 접근할 수 있다. Class Method를 알아보기 전에 Type Method를 먼저 알아보자 Type Method Type Method란 Class Method와 Static M..

iOS/Swift 상식 2023.02.04

Swift - String의 SubScript 접근

SubScript의 개념을 모른다면 Swift 문법과 친해지기 - Subscript 편을 읽고 오시면 됩니다.! Swift 문법과 친해지기 - Subscript subscript 서브스크립트는 우리가 배열을 사용할 때 배열 속 원소에 접근하기 위해 사용하는 대괄호 []를 지칭한다. □ 배열 서브스크립트 정의 → index를 int타입으로 받고 Element를 반환한다. □ 딕 hj39-develop.tistory.com 우리가 문자열을 사용할 때 각 문자하나를 추출하여 사용하고 싶을 때가 있을 것이다. var num: String = "12345" print(num[0])//오류 특히 백준 알고리즘 문제를 풀 때 Swift를 사용하는 사람은 드물겠지만.. 아무튼 String타입으로 들어온 값을 분리하여 ..

iOS/Swift 상식 2023.01.23

Swift - Optional

Optional은 Swift를 처음 접해본 사람들이 헷갈리는 부분들 중 한 부분을 담당하고 있다. 간단하게 설명하자면 Optional은 변수에 값이 있을 수도 있고 없을 수도 있다. 즉 nil(값이 없음)을 허용할 것인지 허용하지 않을 것인지 결정하는 기능이다. nil은 다른 언어의 NULL과 다르다. nil은 해당 공간에 값이 없는 경우 값 대신 nil을 사용하지만 다른 언어의 NULL은 빈 포인터를 가리킬 때 NULL을 사용한다. Optional을 쉽게 이해하기 위해 예를 들어 생각해 보자 (예시를 설명하는 문장은 기울임 꼴을 적용하였다.) 어떤 변수에 Optional을 붙인다는 것 우리가 호텔을 체크인하는 것과 같다. 체크인을 하면 방을 배정받게 된다. Optional을 사용하면 Wrapping이 ..

iOS/Swift 상식 2023.01.23

Swift - Any vs AnyObject

Any Any를 직역하면 '아무거나'라는 의미이다. 이름에서 알 수 있듯이 모든 타입의 인스턴스들을 허용한다는 뜻이다. AnyObject AnyObject의 정의를 살펴보면 프로토콜이다! 모든 클래스가 암시적으로 준수하는 프로토콜 즉 클래스 타입만 가능하다!라는 의미!! 이해하기 쉽게 Object는 클래스를 통해 생성된다. (작명의 중요성) 따라서 AnyObject는 모든 클래스 타입의 인스턴스들을 나타낼 수 있다. 너무 허무하네..; # 참고한 사이트 https://zeddios.tistory.com/213

iOS/Swift 상식 2023.01.23

Swift - Convenience init

Init의 종류에는 2가지가 존재한다. Designated init convenience init Init은 멤버들을 초기화하고 상속받은 멤버들을 커스텀하기 위해 사용한다. (Designated) Init (Designated) Init은 우리가 클래스를 생성할 때 자주 사용했던 Init이다. 해당 Init은 클래스의 프로퍼티가 모두 초기화되게 만들어준다. class Pet{ var dog: String var cat: String init(dog: String, cat: String){ self.dog = dog self.cat = cat } } Convenience init Convenience init은 Designated init을 보조하여 도와주는 역할이다. 말 그대로 보조이므로 Designat..

iOS/Swift 상식 2023.01.23

Swift - Copy On Write(COW) 동작 방식

Copy on Write를 알아보기 전에 학교에서 C언어를 배울 때 지겹도록(?) 들었던 Call-by-Value Call-by-Reference 위 두 가지를 복습 차원으로 알아보자 Call-by-Value 영어 뜻을 직역으로 해석하자면 값의 호출인데 느낌 상 알 수 있듯이 값을 호출할 때 데이터를 복사하여 호출한다는 것이다. 예를 들어 int a = 1; int b = a; b = 3; printf("%d",a);// 1 printf("%d",b);// 3 다음과 같이 호출한다면 변수 a에 1을 메모리에 저장하고 그 값을 b에 저장하는 경우 같은 공간을 가리키는 것이 아닌 메모리에 새로운 공간을 할당하여 값을 복사하게 된다. 따라서 b의 값을 3으로 변경하게 되면 b의 값은 3으로 변경되지만 a의 값..

iOS/Swift 상식 2023.01.23

Swift - Class 성능 향상 시키는 방법

final을 붙이면 성능이 향상된다. 왜??? 이유를 알기 위해서는 Dispatch라는 것을 알아야 한다. Dispatch 내가 호출할 함수를 컴파일 타임에 결정하냐, 런타임에 결정하냐에 따른 방식이다. StaticDispatch (Direct Call) 컴파일 타임에 호출되니 함수를 결정하고 런타임에 그대로 실행된다. 컴파일 시간에 결정되기 때문에 성능상 이점이 있다. Dynamic Dispatch (Indirect Call) 런타임에 호출될 함수를 결정한다. swift는 클래스마다 함수 포인터들의 배열인 vTable이라는 것을 유지한다. 하위 클래스가 메서드를 호출할 때, vTable을 참조하여 실제 호출할 함수를 결정한다. 위와 같은 과정이 런타임에 발생하기 때문에 성능상 손해를 보게 된다 Refe..

iOS/Swift 상식 2023.01.07

iOS - Storyboard vs Code

StoryBoard 장점 - 결과물 예층 쉬움, 속성 쉽게 확인 가능 - 쉽게 UI 생성 가능 - pop, push, present, dismiss등의 코드를 사용하지 않아도 됨 단점 - 화면 로딩 시 무거움 - 링크가 끊어진 경우 파악하기 힘듬 - 협업 문제 발생 가능 ( 오류가 발생한 경우 파악하기 힘듬) - 데이터 흐름이 표시되지 않음 - 앱이 커지면 가독성이 떨어짐 Code 장점 - 가볍다 - 협업 하기 편리하다 - 모든 UI요소에 제어감각이 생긴다. - 재사용하기 용이 - Launch Screen을 제외한 모든 코드가 코드로 구현 가능하다. - 스토리보드는 및 nib는 loading 및 parsing 오버헤드에 영향을 받는다. 단점 - 해당 컴포넌트를 숙지해야 함 - 어떤 화면이 만들어질지 파악..

iOS/Swift 상식 2023.01.07

Swift - Class vs Struct

Class, Struct의 공통점 값을 저장할 프로퍼티를 선언할 수 있다. 함수적 기능을 하는 메서드를 선언할 수 있다. 내부 값에 '.'을 사용하여 접근 가능하다. 생성자를 사용해 초기 상태를 설정할 수 있다. extension을 사용하여 기능을 확장할 수 있다. Protocol을 채택하여 기능을 설정할 수 있다. Class, Struct 차이점 Class 참조 타입 Heap 영역에 동적으로 할당돼서 Stack 영역보다 접근 속도가 느리다 Heap 영역은 스레드가 메모리를 공유하는 공간이기 때문에 스레드로부터 안전하지 않으므로 thread lock 기능이 필요하다 → 오버헤드 가능성 있음 같은 인스턴스를 여러 개의 변수에 할당한 뒤 값을 변경시키면 할당한 모든 변수에 영향을 준다. ARC로 메모리를 관..

iOS/Swift 상식 2022.12.31