분류 전체보기

    [Swift]. 프로토콜지향 프로그래밍(POP)

    프로토콜 지향 프로그래밍(Protocol - Oriented - Programming) 객체지향 프로그래밍 장점 - 상속을 이용한 코드의 재사용성 단점 - 하나의 클래스만 상속이 가능하다.(다중 상속 불가능) - 상위클래스의 메모리 구조를 따라갈 수 밖에 없음.(필요하지 않은 속성/메서드도 상속된다.) - 클래스(참조타입)에서만 사용 가능 프로토콜 지향 프로그래밍 스위프트의 표준 라이브러리의 타입과 관련된 것을 살펴보면 대부분 구조체로 구현이 되어있다. 객체지향 프로그래밍 패러다임에 기반을 둔 언어는 대부분 클래스의 상속을 사용해 타입에 공통된 기능을 구현한다. 상속도 되지 않는 구조체로 다양한 공통 기능을 가질수 있는가.. 이는 프로토콜과 익스텐션으로 이루어져있다. 프로토콜은 특정 역할을 수행하기 위한..

    [디자인 패턴] 싱글톤 패턴 (Singleton Pattern) feat. Swift

    싱글톤 패턴 (Singleton Pattern) - 앱 구현시에, 유일하게 한개만 존재하는 객체가 필요한 경우에 사용 (특정한 유일한 데이터/관리 객체가 필요한 경우) - 한번 생성된 이후에는 앱이 종료될때까지, 유일한 객체로 메모리에 상주 - 유일하게 한 개만 존재하는 객체이기 때문에 타입속성과 유사하다. class Singleton { // 타입 프로퍼티(전역변수)로 선언 static let shared = Singleton() // 자신의 객체를 생성해서 전역변수에 할당 var userInfoId = 58132 } Singleton.shared //처음 접근하는 순간 shared객체 생성 let object = Singleton.shared //같은 싱글톤을 가리키게 할 수 있다. object.us..

    [Swift]. 속성 감시자(Property Observer)

    속성 감시자(Property Observer) 저장속성을 관찰하는 역할 class Profile { // 일반 저장 속성 var name: String = "이름" // 저장속성 + 저장 속성이 변하는 시점을 관찰하는 메서드 var statusMessage: String = "기본 상태메세지" { //저장속성 willSet(message) { //속성감시자, 바꿀 값이 파라미터로 전달 print("메세지가 \(statusMessage)에서 \(message)로 변경될 예정입니다.") print("상태메세지 업데이트 준비") } didSet(message){ //속성감시자, 바뀌기 전의 값이 파라미터로 전달 print("메세지가 \(message)에서 \(statusMessage)로 변경되었습니다") pr..

    클래스(class) vs 구조체(struct), 객체지향프로그래밍 feat. Swift

    클래스 클래스는 참조타입(RefrenceType)이다. 힙의 영역에 실제 데이터를 저장하고 스택영역에선 힙영역의 주소를 가리킨다. 그래서 주소를 참조하는 참조타입이다. 복사시 값을 복사하는게 아니라 주소를 전달해서 동일한 데이터를 가리키게 만든다. (메모리 변경 X) 그러므로 복사된 객체의 값을 바꾸면 원본값도 함께 바뀐다. 힙(Heap)의 공간에 저장하므로, ARC시스템을 통해 메모리를 관리한다. class Person{ var name = "사람" } var p = Person() //p에 담긴값 주소: x123124 var p2 = p //p2에 담긴값 주소: x123124 //p와 p2는 클래스이므로 같은 주소값을 갖는다. p.name //사람 p2.name = "미진" //미진 p.name //..

    iOS . 오토레이아웃 - Aspect Ratio

    Aspect Ratio 화면의 객체의 크기를 비율로 지정할 때 사용 이미지나 제목 등을 다양한 화면에서 고정된 비율의 크기로 보여주기 위해 사용!

    [Swift] Hashable(Hash/HashValue) 프로토콜

    유일한 값을 갖도록 해서 Dictionary의 키값 또는 Set요소가 될 수 있게 하는 프로토콜 두 객체나 인스턴스를 비교하는데 사용되는 프로토콜이다. Hashable프로토콜은 데이터 타입의 값을 해시코드나 해시값으로 변환한다. Equatable 프로토콜을 상속한다. Hashable을 알기 전에.. 딕셔너리의 Key값은 Hashable해야한다. Hash값을 갖는다 라는 뜻이다.. 그게 무엇이냐? Hash함수 어떤 숫자/글 등을 input으로 사용해 어떤 알고리즘을 통해 고정된 길이의 숫자/글자이면서 유일한 값이 나오는 함수 어떤 알고리즘인지는 중요하지 않다. 해쉬값이라는 예는 아래와 같다. 예 ex). "steve", "cooker", "ilon"가 어떤 함수를 거치게 되면 해쉬(Hash)함수⤵️ (ha..

    [Swift]. @어트리뷰트 키워드와 다양한 키워드들

    어트리뷰트 키워드 컴파일러에게 추가적인 정보를 제공하는 키워드 @available, @objc, @escaping, @IBOutlet, @IBAction, @discardableResult ... 1. 선언에 추가적인 정보를 제공 @available(iOS 11.0, macOS 10.12, *) class MyClass{ //... } //MyClass 선언은 iOS 11.0, macOS 10.12이상에만 적용되는 클래스 //그보다 아래 버전에선 컴파일러가 못읽는다. MyClass의 선언에 대한 추가정보 제공 2. 타입에 추가 정보 제공 func doAnything(completion: @escaping() -> ()){ //... } //@escaping: () -> () 타입에 대한 추가정보 제공 @..

    RxSwift, MVVM - RxMemo(2)

    보호되어 있는 글입니다.

    RxSwift, MVVM - RxMemo(1)

    보호되어 있는 글입니다.

    RxSwift(45). NSObject+Rx라이브러리

    보호되어 있는 글입니다.