Swift 21

Swift 공식문서로 공부하기: Protocols

Protocols — The Swift Programming Language (Swift 5.6) Protocols A protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality. The protocol can then be adopted by a class, structure, or enumeration to provide an actual implementation of tho docs.swift.org 위 공식문서를 보고 프로토콜에 대해서 공부해보자. 공부했지만 까먹은 Delegate 디자인 패턴을 더 깊이 공부할 수 있도록....

Swift 2022.04.04

Swift: private과 fileprivate

private과 fileprivate접근수준의 차이는 fileprivate 접근수준으로 지정한 요소는 같은 파일의 어떤 코드에서도 접근할 수 있지만, private 접근수준으로 지정한 요소는 같은 파일이라도 다른 타입이라면 접근이 불가능하다. 하지만 extension으로 같은 타입을 확장하는 코드가 같은 파일에 존재하는 경우에는 사용할 수 있다. public struct SomeType { private var privateVariable = 0 fileprivate var fileprivateVariable = 0 } // 같은 타입의 익스텐션에서는 private요소에 접근할 수 있다. extension SomeType { public func publicMethod() { print("\(self.p..

Swift 2022.02.21

Swift: 접근제어 구현 규칙

모든 타입에 적용되는 접근 수준의 규칙은 '상위 요소보다 하위 요소가 더 높은 접근 수준을 가질 수 없다' 이다. 비공개 접근 수준으로 정의한 구조체 내부의 프로퍼티로 내부 수준이나 공개 수준을 가지는 프로퍼티를 정의할 수 없고, 함수의 매개변수로 특정 접근 수준이 부여되었을 때, 함수의 접근수준이 매개변수 타입의 접근 수준보다 높을 수 없다. private class Aclass { /** * 비공개 접근 수준으로 정의한 클래스에서 * 공개 접근 수준의 메서드를 정의한다고 해도 메서드의 * 접근 수준도 비공개 접근수준으로 취급된다. */ public func someMethod() { //대충 메서드 내용 } } /** * Aclass의 접근 수준이 비공개 접근 수준이므로 * 공개접근 수준 함수의 매개..

Swift 2022.02.15

Swift: Swift의 접근 수준

아래의 내용은 야곰님의 SWIFT 프로그래밍의 내용을 정리한 것입니다. Swift에서 접근제어(Access Control)는 접근제어 키워드를 사용해서 구현할 수 있다. 타입(클래스, 구조체, 열거형,...)에 접근 수준을 지정할 수 있다. 타입 내부의 프로퍼티, 메서드, 이니셜라이저, 서브 스크립트 에도 접근 수준을 지정할 수 있다. 접근 수준을 나타내는 키워드로는 open, public internal, fileprivate, private 다섯 가지가 있다. 접근수준 키워드 접근도 범위 비고 개방 접근수준 open 위로 올라갈 수록 접근도가 높음 모듈 외부까지 클래스에서만 사용 공개 접근수준 public 모듈 외부까지 내부 접근수준 internal 모듈 내부 파일외부비공개 접근수준 filepriva..

Swift 2022.02.15

Swift: 접근제어의 필요성

접근제어(Access Control)는 객체지향 프로그래밍에서 은닉화를 구현하기 위한 개념중 하나이다. 코드끼리 상호작용을 할 때 파일간에, 또는 모듈간에 접근을 제한할 수 있는 기능이다. 객체지향 프로그래밍 패러다임에서 캡슐화와 은닉화를 구현하는 이유는 어떠한 이유 등으로 외부에서 보거나 접근하면 안되는 코드에 불필요한 사용자가 접근할 수 있기 때문이다. 스위프트의 접근제어는 모듈과 소스파일을 기반으로 설계되어 있다. 모듈(Module)은 배포한 코드의 묶음 단위이다. 하나의 프레임워크(Framework), 라이브러리(Library), 애플리케이션(Application)이 모듈의 단위가 될 수 있다. 스위프트에서는 import 키워드를 사용해서 모듈을 불러온다. 소스파일은 하나의 스위프트 소스코드 파일..

Swift 2022.02.14

Swift: 인스턴스 생성1

이니셜 라이저(initializer)를 정의하면 인스턴스의 초기화 과정을 직접 구현할 수 있다. 구현된 이니셜라이저는 인스턴스를 생성할 수 있는 특별한 메서드가 된다. 반환 값은 없고, 인스턴스를 초기화하는 역할을 한다. func 키워드를 사용하지 않고, init 키워드만 사용해서 이니셜 라이저 메서드임을 표시할 수 있다. 클래스, 구조체, 열거형등의 구현부 또는 클래스를 제외한 각 타입의 익스텐션 구현부에 위치할 수 있다. class SomeClass { init() { //클래스 이니셜라이저 수행 } } struct someStruct { init() { //구조체 이니셜라이저 수행 } } enum someEnum { case someCase init() { //열거형은 초기화시 반드시 case중 하..

Swift 2022.02.12

Swift: 타입 메서드(Type Method)

프로퍼티에 인스턴스 프로퍼티와 타입 프로퍼티가 있는 것처럼, 메서드에도 인스턴스 메서드와 타입 메서드가 있다. 이번에 알아볼 타입 메서드는 타입 자체에서 호출이 가능하다. 객체지향 프로그래밍에서의 클래스 메서드와 유사하다. 타입 프로퍼티를 만들 때 앞에 static 키워드를 붙인 것처럼, 이번에는 메서드앞에 static 키워드를 사용하여 타입 메서드임을 나타내 줄 수 있다. static 키워드와 class 키워드를 사용하여 타입 메서드를 만드는 두가지 방법이 있다. static 키워드로 메서드를 정의하면 상속 후 메서드 재정의가 불가능하며 class 키워드로 메서드를 정의하면 상속 후 메서드 재정의가 가능하다. class AClass { //static 타입 메서드 static func staticTyp..

Swift 2022.02.12

Swift: 인스턴스 메서드(Instance Method)

스위프트에서는 클래스, 구조체, 열거형등의 동작을 캡슐화한 인스턴스 메서드와 타입 자체의 동작을 수행하는 타입 메서드를 정의할 수 있다. 구조체와 열거형이 메서드를 가질 수 있다는 점은 스위프트와 다른 프로그래밍 언어의 차별화된 장점이다. 스위프트는 프로그래머가 정의하는 타입(클래스, 구조체, 열거형 등)에 자유롭게 메서드를 정의할 수 있다. 인스턴스 메서드(instance method) 특정 타입의 인스턴스에 속한 함수를 말한다. 인스턴스와 관련된 동작을 수행한다. 문법은 함수와 동일하다. 인스턴스 메서드는 함수와 달리 특정 타입 내부에 구현하므로, 인스턴스가 존재할 때만 사용할 수 있다는 점이 함수와의 유일한 차이점이다. class LevelClass { //현재 레벨을 저장하는 저장 프로퍼티 var..

Swift 2022.02.11

Swift: 키 경로(Key Path)

야곰님의 SWIFT 프로그래밍 책을 공부하고 요약하여 정리한 것입니다~~~ 함수는 일급 객체로서 상수나 변수에 참조를 할당할 수 있었다. 함수를 참조해두고, 나중에 원할 때 호출할 수 있고, 다른 함수를 참조하도록 할 수도 있다. func someFunction(paramA: Any, paramB: Any) { print("someFunction called...") } func anotherFunction(paramA: Any, ParamB: Any) { print("anotherFunction called...") } var functionReference = someFunction(parmaA: , paramB: ) functionReference("A", "B") functionReference ..

Swift 2022.02.11

Swift: 타입 프로퍼티(Type Property)

각각의 인스턴스가 아닌 타입 자체에 속하는 프로퍼티를 타입 프로퍼티라고 한다. 인스턴스 생성여부와 상관없이 프로퍼티의 값은 하나이며, 그 타입의 모든 인스턴스가 공통으로 사용하는 값이다. 저장 타입 프로퍼티의 특징은 다음과 같다. 변수/상수로 선언할 수 있다. 반드시 초깃값을 설정해 주어야 한다. 지연 연산된다. 이때 다른 저장 프로퍼티와는 다르게 다중 스레드 환경에서도 한 번만 초기화된다. 연산 타입 프로퍼티는 변수로만 선언할 수 있다. 코드를 통해 타입 프로퍼티와 인스턴스 프로퍼티의 차이를 알아보자. class AClass { //저장타입 프로퍼티 static var typeProperty: Int = 0 var instanceProperty: Int = 0 { didSet { Self.typePro..

Swift 2022.02.06