iOS 53

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

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