본문 바로가기

Swift/Deep dive!!

(18)
[Swift] Array's enumerated(). 배열의 각 원소 index 가져오는 방법 예전에도 map을 사용하면서 "index 지원 안하나?" 잠깐 생각해 본 적이 있지만,, 이번에 다익스트라 문제를 풀다가 "map을 쓸 때 element 랑 추가로 index는 동시에 사용 못 할까?" 에 해답을 찾게 되었습니다. 바로 이 함수입니다!! 평소에는 for in 구문을 통해서 배열의 첫 인덱스부터 마지막 인덱스까지 얻었습니다. map을 사용할 때는 index를 미리 선언하고 값을 증가하며 사용 했습니다. 이젠 이 함수를 사용하면 됩니다!! EnumeratedSequence를 반환 하는데 (n,x) 이렇게 쌍을 반환합니다. 여기서 n은 0 ~ Sequence.count-1까지 index를 의미합니다. x는 Sequence의 첫 원소부터 마지막 원소까지를 의미합니다. for (n, c) in "..
[Swift] CustomStringConvertible Protocol 파해치기 특정 type을 textual한 표현으로 커스텀해주는 protocol입니다. type이란? 내가 만든 커스텀의 구조체, 클래스, 클래스 등의 타입을 의미합니다. 특정 object를 print(_:)로 출력할 때, CustomStringConvertible protocol을 채택 후 내부 instance인 description을 커스텀 했다면 String(describing:)을 통해 어떤 type이든 string으로 변환시켜줍니다. 주의할 점은 이 프로토콜을 채택한 후에 프로토콜의 instance를 바로 쓰거나 일반 제약조건로 쓰는 것은 비 추천 한다고 명시되어 있습니다. Why use CustomStringConvertible? Let's Deep dive. struct World { let popul..
[Swift] 클로저 @escaping과 @non-escaping의 생명주기, 개념과 차이 탐구 [Swift] ver 5.7 에서 @escaping, @non-escaping closure의 차이를 탐구하는 글 입니다. "형 @escaping과 @non-escaping의 정확한 차이를 모르겠어" ... : 나도 모르겠는데 ??!?! 함수의 생명주기 @Escaping과 @non-escaping 클로저의 차이를 설명하기 전에 함수의 생명주기를 간단하게 설명하려고 합니다. 함수는 계속해서 호출 할 탠데 호출 될 때마다 메모리에 계속 함수들의 정보(매개변수, 함수 안 변수들 등)가 쌓일까요?? X. 함수가 호출을 하는 시점에 스택 영역에 할당 되었다가 함수가 끝나는 시점에 스택 영역에서 해제가 됩니다. 즉 호출을 하면 return 되는 시점에 메모리에서 해제 됩니다. 클로저 정의 여러번 사용되는 코드는 함..
[Swift] Array 의미와 선언(Set과의 차이점은?), 자주 사용하는 함수(in 코테) 목차 : Swift에서 자주 사용되는 배열 함수 배열(Array)란? 배열의 선언 삽입과 삭제, 처음과 끝 원소 확인 자주 사용하는 함수(in 코테) 배열(Array)란? Swft에서는 3개의 collection타입을 제공합니다. 그 중에서 오늘은 배열(Array)에 대해서 공부할 것입니다!! 배열에 타입(Int,String...)을 지정할 경우 이외의 타입을 삽입 할 수는 없습니다!! 그대신 컬랙션, 배열에서 검색할 값의 유형은 정해져 있다는 것!! 배열은 orderded list 순서가 있는 목록이에요. index에 따라서 value를 저장할 수 있습니다. Set과 Array의 차이점은? 우선 값의 중복 여부인데요. Array는 value마다 고유의 index가 있기 때문에 값이 중복으로 저장 되어도..
[Swift] 클래스 2단계 초기화와 안전점검 완벽 이해!! 2단계 초기화와 안전 점검 in class 2단계 초기화 안전 점검 단계 클래스 초기화 1단계 클래스 초기화 2단계 클래스와 초기화에 대한 개념이 가물~가물 하다면?! -> 클래스와 초기화 글 다시보기 클래스에서 자동, 지정 초기화, 편리 초기화 개념이 가물~가물~ 하다면?! -> 자동, 지정, 편리 초기화 글 다시보기 2단계 초기화 클래스 초기화는 2 단계를 거쳐서 진행된다. 해당 클래스의 저장 프로퍼티는 초기값으로 모두 초기화 ( 부모 또한 super Designated or 자식 클래스에서 전부 초기화) 자식방향으로 내려오며 초기화된 프로퍼티 중 일부를 필요에 맞게 커스터마이징 하는 단계 2 단계에서 에러없이 초기화가 완료되었음을 보장하기 위해 4단계 안전 점검을 진행한다. 안전 점검 단계 안전 점..
[Swift] 자동, 지정, 편의 초기화(in class). 연쇄 호출 관계 뿌수기!! 초기자 연쇄 호출 관계 부수기! About_Designated Initializer Automatic initializer inheritance About Convenience Initializer 호출 규칙(지정 초기자와 편의 초기자) 클래스와 초기화에 대한 개념이 가물~가물 하다면?! -> 클래스와 초기화 글 다시보기 About Designated Initializer(지정 초기화) 지정 초기화는 기본 초기화입니다. 옵셔널 타입이 아닌 저장 프로퍼티를 전부 초기화 시켜 주어야 한다. else error ( 또한 super클래스의 초기화 메서드도 호출 해주어서 초기화 체인을 이룰 수 있도록 하는 초기화입니다) init(parameters) { statements } 따라서 클래스는 반드시 한개 이상의 ..
[Swift] class 초기화. 왜 super.init()을 쓰는가? (오버로딩, 오버라이딩) 왜 super.init()을 쓰는가? 클래스와 초기화(Initialization) 상속받는 클래스의 경우 오버라이딩(Override)과 오버로딩(Overloading) 클래스와 초기화(Initialization) Swift는 클래스에서 저장 프로퍼티를 자동적으로 초기화 해주지 않는다. 멤버와이즈 초기화 메서드를 지원해주는 구조체와 달리 개발자가 직접 명시적인 초기화를 통해 클래스 내 존재하는 모든 저장 프로퍼티들의 값을 넣어주어야 한다. /** * x = 변수 선언과 동시에 값 할당 * y = init()을 통해 초기화 */ class point { var x : Int = 0 var y : Int init() { y = 0 } } 이 외에는 옵셔널 타입으로 만들면 초기화를 하지 않아도 자동으로 nil타..
[Swift] ARC(Auto Referencing Counter) 안녕하세요👋 꼼꼼한 재은씨 기본편 chapter2를 공부하다 ARC가 궁금해져서 공부를 했습니다!! 참조 카운터는 이전에 공부하다 한번쯤 들어봤는데,, 이번기회에 자세하게 공부해 봐야지~ Todo : ARC(Auto Referencing Counter Auto Referencing Counter 공부 전 필수로 알아야 할 지식! ARC의 특징 ARC가 적절하게 메모리에 할당, 해제 되려면? String Reference Cycles Between Class Instance Weak 키워드 Auto Referencing Counter 공부 전 필수로 알아야 할 지식! Value Type 과 Reference Type에 대해서 알아야 합니다. Value Type : Structure, Enum, Tuple ..