본문 바로가기
728x90

Swift12

클래스와 구조체의 공통점, 차이점 클래스와 구조체의 공통점 - 값을 저장할 속성(property)을 선언할 수 있다. - 함수적 기능을 하는 메서드를 선언할 수 있다. - 내부 값에.(점)을 사용하여 접근할 수 있다. - 메모리에 찍어낸 것을 인스턴스(instance)라고 한다. (인스턴스란? 실제로 메모리에 할당되어 구체적 실체를 갖춘 것을 말한다.) - 생성자를 사용해 초기상태를 설정할 수 있다. - 확장(extension)을 사용하여 기능(메서드)을 확장할 수 있다. - 프로토콜(protocol)을 채택하여 기능을 설정할 수 있다. - 인스턴스 내부에 함수의 정의문은 올 수 있지만 실행문은 올 수 없다. (정의문 내부에는 실행문이 올 수 있다.) 클래스와 구조체의 차이점 이 둘의 가장큰 차이점은 바로, 메모리 저장방식의 차이다. 클.. 2022. 11. 9.
메모리구조 메모리 구조에는 코드 - 데이터 - 힙 - 스택 이렇게 4가지의 영역이 있다. 코드 코드(프로그램)는 명령어 / 프로그램의 영역으로 앱(프로그램)의 모든 코드를 의미한다. (읽기 전용 - getOnly) 데이터 데이터는 전역 변수 / 타입(static) 변수의 영역으로 공통으로 공유하기 위한 데이터이므로 한번 데이터 영역에 올라가면 앱이 실행되는 동안 불변한다. 힙 힙(Heap)은 동적할당(일반적으로 오랫동안 긴 시간 동안 저장)의 영역으로 크기가 크고, 관리할 필요가 있는 데이터이기 때문에 개발자가 잘 관리해야한다. 힙 영역에 할당되는 데이터는 관리를 해야지만 메모리에서 해제된다. 해제되지 않으면 메모리 누수(Memory Leak) 현상이 발생한다. 메모리 누수(Memory Leak) 현상이란? 힙에 .. 2022. 11. 9.
클로저(Closure)란? 클로저(Closure)란? 이름이 없는 함수 (== 익명 함수) 이다. 클로저와 함수는 기능은 완전히 동일하지만, 형태가 다르다. 함수: 이름이 있는 코드 묶음 -> 다른코드가 함수이름으로 호출하기 위해서 클로저: 이름이 없는 코드 묶음 -> 굳이 이름이 없어도 호출할 수 있는 형태로 사용가능 함수의 기본형태 func customFunc() -> String { return ... } 클로저의 기본형태 { () -> String in return ... } Swift에서 이런형태( {중괄호}의 형태 )를 본다면 클로저를 먼저 떠올리자! Swift는 함수를 일급객체로 취급한다. 이 말은 함수는 타입이다! 라는 뜻이다. 함수가 타입인 이유는? 1. 함수를 변수에 할당할 수 있다. 2. 함수를 호출할 때, 함.. 2022. 11. 6.
컬렉션타입 - Copy_On_Write 최적화개념 Copy_On_Write 최적화란? 코드상에서 값을 복사해서 담는다 하더라도, 실제 값이 바뀌기 전까지는 그냥 하나의 메모리 값을 공유해서 사용한다는 개념이다. (메모리를 적게 차지하기 위해 Swift가 알아서 내부에서 처리하는 메커니즘이다.) 글로만 적으면 이해하기가 힘드니 예시로 들면 var array = [1, 2, 3, 4, 5] var newArray = array[0...2] 이렇게 있을 경우 newArray의 새로운 메모리 공간을 만드는 것이 아닌 Swift가 알아서 array의 주소만을 가리키게 해서 사용한다는 개념이다. 2022. 11. 5.
컬렉션타입 - KeyValuePairs KeyValuePairs란? Swift 5.2버전에 등장한 새로운 타입으로, 딕셔너리와 비슷한 형태이지만 순서가 있는 컬렉션타입이다. 그렇기 때문에 Key값이 Hashable할 필요가 없다. (검색 알고리즘 상 빠르지 않다.) Key값이 동일한 것도 가능하다. 요소에 접근하는 방식은 [대괄호]안에 인덱스로 접근이 가능하다.(순서가 있기 때문) 요소 자체에는 튜플방식으로 접근가능하다. Set을 사용할 때 처럼 타입을 꼭 명시해줘야 한다. let introduce: KeyValuePairs = ["first": "Hello", "second": "My Name", "third": "is"] print(introduce[0].key) // 결과값: "first" print(introduce[1].value) .. 2022. 11. 5.
컬렉션타입 - Set(집합) Set이란? 컬렉션 타입의 한 종류로 생김새는 배열과 같이 생겨 구분을 하기 어렵다. 그렇기 때문에 Set을 생성시에는 반드시 타입선언을 해줘야 한다. let set: Set = [1, 2, 2, 3] print(set) // 결과값: [2, 1, 3] 결과값이 순서대로 나오지 않는다. 이처럼 배열과의 가장 큰 차이점에는 두가지가 있다. 1. 요소값을 중복으로 넣어도, 집합의 의미상 요소는 중복 저장이 안된다. (각 요소는 유일한 값 - Hashable해야한다.) 2. 요소들의 순서가 없다. 그렇기 때문에 Set은 주로 정렬순서보다 검색속도가 중요한경우에 사용한다. (내부적으로 값의 검색에 Hashing알고리즘을 사용하기 때문이다.) Set은 서브스크립트 문법이 없고, (배열과 달리 순서도 없고, 딕셔너.. 2022. 11. 5.
728x90