Swift #iOS

· iOS/Swift
네트워크 통신의 이해 iOS에서 서버와의 통신과 처리 HTTP 프로토콜에 대한 이해 네트워킹 TCP / IP 프로토콜 여러가지 프로토콜의 결합 스위프트 내 프로토콜은 약속같은 느낌. 일상생활에서 와이파이를 잡을 수 있는 이유는 여러가지 약속(HTTP, IP, TCP…)의 조합을 통해서 사용할 수 있음. 앱을 만들기 위해 알아야 할 프로토콜은 HTTP 웹을 사용하기 위해선 (WWW를 구성하는 기술) → HTML, HTTP, URL HTTP 프로토콜 HyperText Transfer Protocol 하이퍼 문서를 전송하는 것에서 시작 현재는 이미지 / 영상 / 음성 / 파일 / JSON 등 모든 형태의 데이터 전송가능 인터넷의 모든 것은 HTTP로 이루어져 있음 TCP / IP 프로토콜 [4계층] 클라이언트..
· iOS/Swift
메모리 구조 코드 우리가 만든 코드가 컴파일되어서 CPU가 실행될 수 있는 명령어 형태로 저장되어 있는 것 명령어 / 프로그램 앱(프로그램)의 모든 코드(Text) get-only, read-only (읽을 수만 있는 영역) 앱의 프로그램을 한번 짜면 그게 완성이 된 것 데이터 전역변수 / 타입(static/class) 변수 공통으로 공유하기 위한 데이터 앱이 실행되는 동안 불변 힙 동적할당 - 비어있는 메모리를 찾아서 할당하는 개념 일반적으로 오랫동안 긴시간 동안 저장 크기가 크고, 관리할 필요가 있는 데이터 개발자가 잘 관리해야함 스택 함수실행을 위한 임시적 공간 크기가 작고 빠르게 사용하기 위한 데이터 알아서 자동 관리됨 💡 Heap(힙) 영역에 할당되는 데이터는 관리를 해야지만, 메모리에서 해제가..
· iOS/Swift
클로저의 메모리 구조 컴파일된 명령어의 주소가 힙에 저장됨. 클로저(함수)가 실제 실행되는 건, 스택프레임에서 동작 함수의 직접적인 실행은 스택프레임에서 실행된다. 클로저의 캡처 클로저의 Capturing Value 클로저 외부에 존재하는 stored 변수를 계속 사용해야 함 캡쳐현상이 발생하니 유의해서 써야함 클로저에서 저장할 필요가 있는 값을 캡쳐해서 (인스턴스와 비슷한 방식으로) 값을 저장 값을 저장 또는 참조를 저장 var stored = 0 let closure = { (number: Int) -> Int in // 클로저에서 stored의 주소를 가짐 stored += number return stored } closure(3) // stored : 3 closure(4) // stored :..
· iOS/Swift
클로저 스위프트는 함수를 “일급객체”로 취급 함수는 타입이다. “함수”를 변수에 할당할 수 있음 함수를 호출할때, “함수”를 파라미터로 전달할 수 있음 함수에서 “함수”를 반환할 수 있음 기존의 함수의 형태와 클로저의 형태 비교 // 함수 정의 func aFunction(str: String) -> String { return "Hello, \(str)" } // 클로저의 형태 let _ = {(str: String) -> String in return "Hello, \(str)" } // 클로저의 형태 (타입 추론이 가능한 경우) // 타입이 결정된 거고 변수에 이를 할당하는 것 let _: (Int, Int) -> Int = {(a, b) in let result = a + b return resul..
· iOS/Swift
Method Dispatch 클래스 / 프로토콜의 메서드가 실행되는 방식(Method Dispatch)에 대한 이해 공식문서에 나온 내용이 아닌 자료들을 통한 것이므로 무조건적인 신뢰는 하지 말 것 스위프트가 함수를 실행시키는 방법(3가지 방법을 모두 사용) 컴파일 타입 - [Direct/Static Dispatch] 컴파일 시점에 코드 자체에 함수의 메모리 주소 삽입 또는 함수의 명령 코드를 해당 위치에 코드를 심음(in-line) 가장 빠름 값 타입(구조체/열거형)에 사용 상속 / 다형성의 장점을 누릴 수 없음 런타임 - [Table Dispatch] , [Message Dispatch] Table Dispatch 함수의 포인터를 배열형태로 보관 후에 실행 중간 속도 클래스(Virtual Table)..
· iOS/Swift
프로토콜(Protocol: 규약 / 협약) 클래스와 상속의 단점 하나의 클래스만 상속 가능(다중 상속 불가능) 기본적인 상위클래스의 메모리 구조를 따라갈 수 밖에 없음 필요하지 않은 속성/메서드도 상속됨 클래스(레퍼런스 타입)에서만 가능 자격증의 개념이라고 생각하기 프로토콜의 도입 // 요구사항을 정의 (자격증의 필수 능력만 정의) protocol SomeProtocol { func playPiano() } // 채택 및 구현 // 구조체에서의 채택 struct MyStruct: SomeProtocol { func playPiano() { //code } // 이제 자격증의 능력이 생긴 것 } // 클래스에서 채택 class MyClass: SomeProtocol { // Aclass 상속 시 -> Ac..
· iOS/Swift
확장(Extension) 상속과 확장의 비교 상속 : 클래스만 가능 [수직 확장] 본질적으로 성격이 비슷한 타입을 새로 만들어 데이터를(저장속성)를 추가하거나 기능(메서드)를 변형시켜서 사용하려는 것 확장 : 클래스/구조체/열거형 모두 가능 추가적으로 메서드를 끼워넣기 [수평 확장] 현재 존재하는 타입에 기능(메서드)을 추가하여 사용 메서드 종류만 추가 가능. 추가 메모리 공간이 필요한 저장 속성을 확장하는 것은 불가 → 붕어빵 틀에 별개의 영역에 추가로 붙여넣는다고 생각하기!(Direct Dispatch) Student 클래스 저장 속성 + play () ( 기존 메서드 재정의 불가 ) id name student id 메서드 walk() -1 study() 장점 원본 소스 코드에 대한 액세스 권한이없..
· iOS/Swift
타입캐스팅(Type Casting) 인스턴스 타입을 검사 인스턴스 사용시에 어떤 타입으로 사용할지(속성/메서드) 메모리구조에 대한 힌트를 변경하는 것 메모리의 값을 수정하는 것이 아님 단순히 해당 타입의 인스턴스인 것처럼 취급하려는 목적 is연산자 타입을 체크하는 연산자 이항연산자 참이면 true, 거짓이면 false 리턴 상속관계의 계층에서 포함관계를 생각해보면 쉬움. 상속 : 기본적으로 데이터(저장 속성)를 추가하는 관점에서 생각 Person() --> (true) --> String print("Index - \(index): 클로저 타입입니다.") default: print("Index - \(index): 그 이외의 타입입니다.") } } 옵셔널값의 Any 반환 의도적인 옵셔널값의 사용 Any는..
· iOS/Swift
초기화 인스턴스를 생성하는 과정 저장 속성에 대한 초기값을 설정하여 사용가능한 상태가 되는 것 즉, 생성자 실행의 종료시점에는 모든 저장 속성에 값이 저장되어 있어야 함 오버로딩 지원 파라미터의 수, 아규먼트 레이블, 자료형으로 구분 class Foden { var name: String ... init(name: String, weight: Int) { self.name = name self.weight = weight } ... init(name: String) { self.init(name: name, weight: 80.0) } } 클래스, 구조체, (열거형) 동일 기본 생성자 : 저장 속성의 기본값을 설정하면 “자동” 구현이 제공 = 생성자를 아무것도 만들지 않으면 저장 속성 초기화 시 문제 없..
· iOS/Swift
No.17 타입 메서드 메서드이지만, 인스턴스의 성격이 아닌 타입 자체의 성격에 가까운 메서드 메서드이기 때문에 메모리 공간 할당 X 인스턴스에 대한 속성이 아니고 타입자체에 대한 속성. 내/외부에서 Type.method()로 접근 메서드 실행시, (따로) 스택프레임을 만들고 타입 데이터를 사용 → 종료시 스택프레임 타입에 해당하는 보편적인 동작의 경우 Int.random(in: 1…100) class Dog { static var species = "Dog" init(name: String, weight: Double) { self.name = name self.weight = weight } static func letmeKnow() { // 타입 메서드에서, 타입속성에 접근시에는 타입으로 접근하지 ..
ParkSeongGeun
'Swift #iOS' 태그의 글 목록