Swift

Swift

[Swift] class의 성능은 어떻게 향상시킬까??

이전 값 타입과 참조 타입 글에서 struct보다는 class를 사용하라는 말을 했지만, 특정 프로토콜을 채택해야 하는 상황 등 분명히 class를 사용해야만 하는 경우가 발생한다 앱을 모델링할 경우에 이러한 class 성능을 향상시키기 위한 노력이 반드시 필요하다 지금부터 class의 성능을 향상시키는 방법을 알아보자~ 😎 Static Dispatch vs Dynamic Dispatch 함수를 호출하는 방식인 Static Dispatch와 Dynamic Dispatch을 이용하여 class의 성능을 향상시킬 수 있다. 이러한 함수 호출 방식들에 대해 살펴보자 Dynamic Dispatch Swift에서 class는 상속 기능을 지원하고, 상속한 하위 클래스에서 상위 클래스의 메서드를 오버라이딩해서 사..

Swift

[Swift] 비동기 프로그래밍의 이해

1. 동기/ 비동기 개념에 대한 이해 쓰레드 연산을 수행하는 연산 장치 ( 코어 하나당 대부분 2개의 쓰레드 ) 소프트웨어적인 Thread - NSThread라고 불리는 객체임 메인쓰레드 (1번 쓰레드)는 앱의 시작과 화면을 다시 그리는 역할도 한다 (60Hz 1초에 60번) 여러 역할을 수행하므로 너무 오래 걸리는 작업 시키면 x 다른 thread로 분산처리를 해야함! 💡 작업(Task)를 대기 행렬(Queue)로 보내기만 하면, iOS가 알아서 여러 쓰레드로 나눠서 분산처리 병렬 vs 동시 병렬은 물리적인 쓰레드에서 실제 동시에 일을 하는 개념이고 동시성은 메인 쓰레드가 아닌 다른 소프트웨어적인 쓰레드에서 동시에 일을 하는 개념이다! 개발자는 동시성 부분은 신경쓰면 된다. 여러 개의 쓰레드에서 작업을..

Swift

[Swift] self vs Self

self와 Self 비교 생성자를 다루면서 자주 사용했었던 self와 간간히 나오는 Self의 차이점을 비교해보겠다 self self는 인스턴스를 가리킨다!! self는 자기 자신의 인스턴스를 가리킨다고 한다 다양한 예시를 보며 self가 쓰이는 경우를 알아보자 생성자 내부에서 사용 클래스 or 구조체의 생성자에서 해당 저장 프로퍼티를 초기화할 경우 self.저장 프로퍼티 와 같이 self 키워드로 자기 자신의 인스턴스의 저장 프로퍼티에 접근한다 class Person { var name: String init(name: String) { self.name = name } } var p = Person(name:"sumin") 클래스 내부에서 저장 프로퍼티에 접근하는 경우 사용 class Person {..

Swift

[Swift] 타입 캐스팅

타입 캐스팅 is 연산자(type check operator) 인스턴스의 타입을 검사함 인스턴스 is 타입 형태로 사용 (이항 연산자) 상속은 저장속성 확장 개념이기 때문에 하위 클래스가 상위 클래스의 타입일 수는 있지만, 상위 클래스가 하위 클래스 타입일 수는 없다. (메모리 관점에서 하위 클래스의 인스턴스는 상위 클래스의 속성을 가지고 있지만, 상위 클래스는 하위 클래스의 속성을 가지고 있지 않다.) Person 인스턴스 is Undergraduate(false) Undergraduate인스턴스 is Person (true) class Person { var id = 0 var name = "데이지" var email = "abc@naver.com" } // Person 클래스 상속 class Stu..

Swift

[Swift] 프로퍼티

속성과 메서드 구조체와 클래스에는 속성(프로퍼티)와 메서드가 존재한다 속성은 두 타입에서 동일! 메서드에서는 약간의 차이가 있음 💡 속성 : 구조체/클래스의 변수 저장 속성 지연 속성 계산 속성 타입 속성 타입 저장 속성 타입 계산 속성 속성 감시자 등 💡 메서드 : 구조체/클래스의 함수 인스턴스 메서드 타입 메서드 서브스크립트 생성자 소멸자 1. 저장 속성(Stored Properties) 클래스/구조체에서 찍어낸 각 인스턴스가 가지는 고유의 데이터 var/let으로 선언가능 객체 초기화를 마치는 경우, 저장 속성은 반드시 값을 가져아함 (기본값 & 생성자 & 옵셔널 타입) 열거형은 따로 메모리 공간이 필요한 저장 속성은 선언 불가능 저장 속성은 각 속성 자체가 고유의 메모리 공간을 갖는다 struct..

Swift

[Swift] 값 타입과 참조 타입

값 타입과 참조 타입 값 타입(Value Type) 참조 타입(Reference Type) 구조체, 열거형, 튜플 클래스, 클로저 값 타입 구조체, 열거형, 튜플 타입 자체는 데이터 메모리 영역 에서 생성된다 스택 메모리 영역 에 인스턴스가 생성된다 인스턴스 복사시) 새로운 값이 할당되어 스택 메모리 영역에 쌓인다 그러므로 복사본의 내부 프로퍼티를 변경하면 그 복사본의 값이 변하고 원본 값은 변하지 않는다 인스턴스 let으로 선언시) 인스턴스의 내부 프로퍼티들이 var로 선언되었더라도 그 값을 변경할 수 없게된다 참조 타입 클래스나 클로저 타입 자체도 값 타입과 마찬가지로 데이터 메모리 영역 에서 생성된다 힙 메모리 영역 에 생성된 인스턴스의 데이터를 저장한다 스택 메모리 영역 에서는 힙 메모리 영역 에..

Swift

[Swift] 함수

함수 swift문법에서 평소에 쓰던 함수에 대해 메모리 구조 혹은 @discardableResult과 같은 새로운 개념도 알게 되었고, 헷갈렸던 부분도 더욱 구체적으로 알게되었다 배운 내용들을 정리하고 예제도 만들어보고 내 생각도 덧붙이면서 지식을 공유하고자 한다 함수는 특정한 기능을 하는 코드의 모음이고, 입력과 출력이 존재할 수 있다 함수는 코드의 반복되는 부분을 줄이고 기능에 따라 분류해놓기 위해 사용된다 예를 들어 a와 b에 다양한 수를 넣어 a를 b만큼 출력하는 알고리즘을 작성하려고 할 때, var a = 2 var b = 3 for i in 1...b { print(a) } a = 6 b = 4 for i in 1...b { print(a) } a = 13 b = 33 for i in 1.....

Swift

[Swift] 클래스와 구조체

클래스와 구조체는 어떻게 다를까?? 1. 클래스와 구조체 같은 데이터들을 가지고 있는 데이터 묶음을 정의해두는 틀 동일한 종류의 값들 (이름, 나이, 성별 등)을 가지고 있는 객체들을 생성할 때, 공통으로 사용되는 부분을 미리 정의해놓는것 즉, 객체를 생성하기 위한 설계도라고 할 수 있다 사용자 정의 타입 : String, Int와 같은 타입을 사용자가 정의한다 → Optional 처리 가능 프로퍼티, 메서드로 구성 데이터 모델링 시 주로 사용 .(점문법)으로 내부의 멤버( 프로퍼티, 메소드)에 접근 //데이터 묶음을 정의 (사용자가 직접 type 생성) class Vehicle { //프로퍼티(변수) var wheelCount: Int = 4 var name: String = "car" //메서드(함수..

soominii
'Swift' 카테고리의 글 목록