Programming/Swift
-
Swift - Protocol Optional RequirementProgramming/Swift 2022. 1. 4. 19:55
안녕하세요! BeePeach입니다 :) 오늘 다뤄볼 내용은 Protocol Optional Requirement(선택적 요구사항)입니다. 먼저 헷갈릴 수 있는 단어를 확실하게 하고 가겠습니다. Optional requirement에서의 Optional은 우리가 이전에 공부한 Optional Type을 의미하는 게 아닙니다. 여기서 Optional은 단어 그대로 선택적이라는 형용사적 의미이고 우리가 이전에 Int?과 같이 사용하던 Optional은 형용사적 의미가 아니라 Optional Type을 지칭하는 명사적 의미입니다. 지금까지 공부한 protocol은 requirement(요구사항)를 선언하고 Type이 protocol을 채용한다면 반드시 요구사항을 구현해야 했습니다. 선택적 요구사항이란 Type이..
-
Swift - Protocol CompositionProgramming/Swift 2022. 1. 3. 11:20
안녕하세요 BeePeach입니다 :) 오늘 공부해볼 내용은 protocol composition입니다. Composition의 의미가 애매할 수 있는데 합성, 조합을 의미한다고 생각하면 됩니다. 이미 존재하는 Protocol을 조합해서 여러 개의 protocol을 동시에 만족시키는 Type을 만들어냅니다. 주의할 점은 새로운 Type을 만든 것은 아니고 기존에 존재하는 것을 조합했을 뿐입니다. Protocol Composition 헷갈릴 수 있는 부분을 먼저 집고 넘어가는게 좋을 거 같네요. 이전에 protocol을 채용할때 TypeName 옆에 : (colon)을 적고 , (comma)로 구분해서 여러 개의 protocol을 채용할 수 있다고 했습니다. 그럼 이게 Compostion(조합)아니야?? 여..
-
Swift - Protocol InheritanceProgramming/Swift 2022. 1. 2. 12:24
안녕하세요 BeePeach입니다 :> 오늘은 Protocol의 Inheritance(상속)에 대해서 공부를 해보려고 합니다. Class의 특징 중에 하나는 상속이 가능하다는 점이었습니다. Protocol도 class와 비슷하게 상속이 가능합니다. 그럼 Protocol에서 상속을 어떻게 사용하는지 같이 공부해보도록 하겠습니다. Protcol Inheritance Protocol의 상속은 class의 상속과 문법이 똑같습니다. 다만 차이점은 protocol 상속은 여러 개의 protocol 상속이 가능합니다. 여러 개를 상속할 때는 , (comma)로 구분해주면 됩니다. 어려울 부분이 없으므로 바로 예제를 보겠습니다. Readable과 Writable 프로토콜을 선언하고 이를 동시에 상속하는 TextFile..
-
Swift - Protocol as TypeProgramming/Swift 2021. 12. 29. 23:02
안녕하세요 BeePeach입니다 :0 이번 포스팅에서 공부해볼 주제는 Protocol Type입니다. Protocol에서 기능들을 직접 구현을 할 수는 없지만 프로토콜을 Type으로 사용할 수 있습니다. 이를 다른 말로 existential type이라고 합니다. 이 말은 '프로토콜을 (conform)따르는Type이 존재한다.' 라는 말에서 유래했습니다. Protocol도 Type이기 때문에 protocol의 이름을 지어줄 때 UpperCamelCase 컨벤션을 따른 것입니다. Protocol Type 위에서 설명했듯이 protocol도 First Class Citizen입니다. (First Class Citizen에 대해서 모르신다면 여기를 참고해주세요.) First Class Citizen이기 때문에..
-
Swift - Protocol Initializer , SubscriptProgramming/Swift 2021. 12. 28. 18:28
안녕하세요 BeePeach입니다 :) 이번 포스팅에서는 지난번 포스팅에 이어 Protocol에서 Initializer와 Subscript를 정의하는 방법에 대해서 공부해보도록 하겠습니다. Initializer Init을 정의하는 방법도 마찬가지로 body를 제외하고 헤더만 적어주면 됩니다. 어려울 게 없으니 바로 예시를 보겠습니다. Figure라는 프로토콜에 name 프로퍼티와 init(name:)을 정의했습니다. 그리고 Triangle이라는 struct를 정의했는데요 init(name:)을 요구하고 있으니 init(name:)을 정의하고 내부 구현은 우리가 원하는 대로 할 수 있습니다. 이 코드에서 짚고 넘어갈 부분은 protocol에서 name 프로퍼티와 init(name:)을 요구하고 있고 Tria..
-
Swift - ProtocolProgramming/Swift 2021. 12. 22. 13:05
안녕하세요 BeePeach입니다 :) 이번에 공부해볼 내용은 Protocol(프로토콜)입니다. 먼저 Protocol의 사전적 정의부터 한 번 알아볼까요?? 사전적 의미는 규약, 조약이라고 볼 수 있겠네요. 규약이란 서로 무엇인가를 위해서 약속하고 지키는 것을 의미하죠??? 이러한 의미로 Protocol이란 Type(class, struct, enum)이 어떠한 기능을 구현하기 위해서 필요한 멤버(propert, method, init...)들을 선언해야 한다고 약속하는 것입니다. 다시 말해 Protocol은 Type이 특정 기능을 구현하기 위한 멤버들의 bluePrint(청사진)을 정의합니다. 청사진만 제공하는 것이므로 기능을 구현하지는 않습니다. 어떠한 멤버들이 이러한 형태로 구현됐으면 좋겠어!라는 느..
-
Swift - ExtensionProgramming/Swift 2021. 12. 20. 18:39
안녕하세요 BeePeach입니다 :/ 이번에 공부해볼 내용은 extension입니다. Extension은 이미 존재하는 class, struct, enum, protocol 즉, 다시 말해 존재하는 Type에 새로운 멤버를 추가시킬 때 사용합니다. 심지어 우리가 코드에 접근할 수 없는 기본 제공 Type(Int, String 등등...) 또는 OpenSource에서 제공하는 Type에도 멤버를 추가시킬 수 있습니다. 여기서 주의 깊게 봐야할 단어는 이미 존재하는과 새로운 멤버입니다. 존재하지 않는 Type에는 extension을 사용할 수 없습니다. 그리고 새로운 멤버를 추가시키는 것이지 이미 존재하는 멤버를 수정하는 게 아니므로 override도 불가능합니다. Extension으로 추가할 수 있는 기능..
-
Swift - DeinitializerProgramming/Swift 2021. 12. 19. 11:52
안녕하세요 BeePeach입니다 :) 이번에 공부해볼 내용은 deinitializer입니다. Initializer 이름 앞에 de가 붙었네요?? Init은 초기화를 담당하는 녀석이였습니다. Deinit은 인스턴스가 메모리에서 해제되기 직전에 호출되는 멤버입니다. Initializer는 class, struct, enum에서 사용할 수 있지만 deinitializer는 class에서만 사용 가능합니다. Deinitializer Swift에서는 인스턴스가 더 이상 사용되지 않는다면 자동적으로 메모리에서 삭제시킵니다. 이러한 방식은 ARC(Automatic Reference Counting)으로 관리가 됩니다. (ARC는 매우 중요하지만 여기서는 다루지 않고 따로 포스팅 하겠습니다.) 메모리 관리를 알아서 하..