swift 55

멀티 스레드 구현시 고려해야할 것들

멀티 스레드 여러 개의 스레드가 동시에 작업을 처리하는 것을 의미한다. 하나의 프로세스 내부에는 여러 개의 스레드가 존재하고, 스레드들은 프로세스의 자원을 공유하고 독립적으로 실행된다. 장점 메모리 공간과 시스템 자원 소모가 줄어든다. 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 간단하다. 단점 서로 다른 스레드가 데이터와 Heap 영역을 공유하므로 다른 스레드가 사용 중인 변수나 자료구조에 접근하는 경우 이상한 값을 얻을 수 있다. 병목현상으로 인해 성능이 저하될 수 있다. 멀티 스레딩 프로그래밍 시 고려해야 할 것 Mutable, Immutable Immutable 인스턴스는 Thread-safe 하다. Mutable 인스턴스는 Thread-safe 하지 않지만 읽기 전용으로 사용한다면 문..

iOS/Swift 상식 2023.02.19

Delegates vs Notification 동작 방식

두 동작 방식 모두 앱 내에서 발생한 이벤트가 현재 화면이 아닌 다른 화면까지 영향을 줄 때 사용한다. 공통점 Delegate, Notification 둘 다 한 화면에서 발생한 이벤트를 다른 화면에 전달하는 기능을 가지고, 값의 변화를 감지해서 이벤트를 발생시킨다. 동작 방식에는 약간의 차이가 있다. Delegates 다른 객체의 인스턴스를 내부적으로 보유하여 그 인스턴스를 활용하는 방식으로 동작한다. Notification 어떤 객체를 Observing 한 뒤 해당 객체의 변화를 Observer들이 이벤트를 받아서 처리하는 방식으로 동작한다. 차이점 Delegates 수신하는 화면에서 발신받는 화면의 정보를 알고 있어야 한다. Delegate에 대해 조금 더 자세히 알고 싶다면 https://hj39..

iOS/Swift 상식 2023.02.18

KVO(Key Value Observing) 동작 방식

KVO 의미 객체의 어떤 값이 변경되었을 경우 UI에 반영하기 위해 컨트롤러는 해당 객체에 Observing을 도입하여 델리게이트에 특정 메시지를 보내 처리할 수 있도록 하는 것 property observer( willSet, didSet)과 아주 유사하다. 둘의 차이점은 뒷부분에 작성할 예정 ㅎ.. KVO는 swift코드로 좋지 못하다. 왜냐하면 Objective-C 런타임에 의존하기 있기 때문이다. KVO Observing을 하기 위해서는 감시할 변수에 @objc dynamic을 사용해야 한다. 더보기 @objc @objc는 swift로 컴파일을 할 때 objective-c 컴파일러를 사용하겠다는 의미이다. dynamic dynamic은 objective-c 문법인데 컴파일을 할 때 코드를 실행하는..

iOS/Swift 상식 2023.02.11

Property Observer

Property Observer의 뜻은 프로퍼티를 감시한다 라는 의미이다. Stored Property(저장 프로퍼티)에서만 사용이 가능하다. willSet - 값이 저장되기 직전에 호출 didSet - 값이 저장된 직후 호출 willSet willSet 옵저버라고 부른다. 새로운 값이 상수 매개변수로 전달된다. 매개변수 이름을 직접 지정할 수 있지만, 직접 지정 하지 않는 경우 newValue라는 매개변수를 통해 전달된다. didSet 이전 프로퍼티 값을 포함하는 상수 매개변수가 전달된다. 매개변수 이름을 직접 지정할 수 있고, 지정하지 않는 경우 oldValue라는 매개변수를 통해 사용할 수 있다. 위에서 저장 프로퍼티에서만 프로퍼티 옵저버를 사용할 수 있다고 했지만 연산 프로퍼티에서도 조건을 만족되..

iOS/문법 2023.02.11

Property

Property 종류 Stored Property (저장 프로퍼티) Computed Property (연산 프로퍼티) Type Property (타입 프로퍼티) Stored Property (저장 프로퍼티) 상수(constant) 혹은 변수(variable) 값을 인스턴스 일부로 저장한다. (클래스, 구조체에서 사용) var: 변수 let: 상수 간단하죠..? Computed Property (연산 프로퍼티) 연산 프로퍼티는 저장 프로퍼티와 다르게 저장을 하기 위한 목적의 프로퍼티가 아닌 연산을 하기 위한 프로퍼티이다. (말장난 느낌이네..;) 예를 들어 보면 class Test{ var a = 1 var x = { get{ return a } set{ a = newValue * 2 } } } var t..

iOS/문법 2023.02.11

Singleton 패턴 알아보기

Singleton은 객체를 하나 생성하고 공용으로 사용하고 싶을 때 사용한다. Singleton은 어떤 객체에서도 같은 데이터를 사용하고 싶을 때 사용하게 된다. (환경설정, 네트워크 객체, 로그인 정보 등을 미리 생성해 둔 객체에 넣어두고 사용한다) 예를 들어 클래스 A, B, C가 있을 때 A의 데이터를 B, C 클래스에서 같은 데이터를 사용한다고 가정하자. class A{ var data = "hello" func printData() -> String { return data } } class B{ var a1 = A() a1.printData()//hello } class C{ var a2 = A() a2.printData()//hello } 위 예제에서 A클래스 인스턴스를 B, C 클래스에서 ..

iOS/Swift 상식 2023.02.05

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