본문 바로가기

Swift27

서브스크립트에 관하여 서브스크립트(Subscript) -클래스, 구조체, 열거형에서 컬렉션, 리스트, 시퀸스의 등 타입의 요소에 접근하기 위한 바로가기 첨자로 단축 문법이다. -별도의 getter, setter 메서드를 구현하지 않아도 값을 가져오거나, 값을 설정해줄 수 있다. -해당 인스턴스 이름 뒤에 [ ] 기호로 묶고 안에 값을 넣음으로써 서브스크립트를 사용한다. -Array(배열)안의 원하는 index 값에 접근하고 싶을 때, Array[index]를 통해 값에 접근할 수 있는 것, Dictionary(사전)의 key를 통해 값에 접근하고 싶을 때, Dictionary[key]를 통해 값에 접근할 수 있는 표현들이 서브스크립트를 말한다. -단일타입에 여러개의 서브스크립트를 정의할 수 있다. Array에서 서브스크립트 .. 2023. 1. 28.
오버라이딩(Overriding)에 관하여 오버라이딩(Overriding) -공식문서에 따르면 오버라이딩은 "하위 클래스가 슈퍼클래스로부터 상속되는 인스턴스 메서드, 타입 메서드, 인스턴스 프로퍼티, 타입 프로퍼티, 서브스크립트 등이 사용자 지정 구현이 가능한데 이것을 오버라이딩이라고 부른다." ( 쉽게 말해 "재정의") -서브클래스가 슈퍼클래스로부터 상속받은 메서드나 프로퍼티 등을 재정의 해주는 키워드로 사용 방법은 정의하기 전에 "override" 키워드를 붙여주는 것이다. 만약 슈퍼 클래스에 재정의해줄 대상이 없는데 override 키워드를 붙이면 컴파일 에러가 발생한다. -서브클래스에서 슈퍼클래스의 특성(메서드, 프로퍼티 등)을 재정의 했을 때, 슈퍼클래스의 특성도 같이 서브클래스에서 활용하고 싶다면 "super" 프로퍼티를 사용하면 된다.. 2023. 1. 26.
제네릭(Generic)에 관하여 제네릭(Generic) -제네릭은 스위프트의 강력한 기능 중 하나로, 제네릭을 이용해서 코드를 짜면 1. 어떤 타입에도 유연하게 대응이 가능, 2. 재사용이 용이, 3. 코드의 중복을 줄여 깔끔한 표현이 가능하다. -스위프트의 표준 라이브러리는 대부분 제네릭을 사용한 코드이며, 우리는 제네릭을 쭉 사용해왔을 것이다. 예를 들어 Array, Dictionary, Set 등이 모두 제네릭 컬렉션이고, 우리가 Int, String 타입을 요소로 갖는 배열을 만드는 등의 동작들이 모두 제네릭의 기능이다. 제네릭(Generic)의 사용 -제네릭을 사용할 때는 제네릭을 사용하려는 타입 명이나 함수 명 뒤에 을 적어서 사용한다. - 에서 타입 이름을 지어줄 때는 보통 T, V 등과 같은 단일 문자나 대문자 Camel.. 2022. 11. 23.
Protocol에 관하여 1. Protocol(프로토콜) -프로토콜은 특정 기능을 수행하기 위한 메서드, 프로퍼티 등 요소들을 정의해 놓은 청사진을 말한다. -프로토콜은 정의와 제시를 할 뿐 원하는 특정 기능 구현을 제공하지는 않고, 클래스, 구조체 또는 열거형에서 프로토콜을 채택하여 특정 기능을 실제 구현할 수 있다. ex) 프로토콜 정의 protocol Example { } ex) 프로토콜 채택 struct ExamStruct : Example { } class ExamClass : Example { } enum ExamEnum : Example { } -extension을 통해 프로토콜에 추가적인 기능을 더해줄 수 있다. -다른 프로토콜을 상속받을 수도 있다.(다중 상속도 가능) 프로토콜에서 프로퍼티 요구사항 1. 이름과 .. 2022. 11. 14.
lazy variables에 관하여 -Navigation bar에 right button을 두고 클릭했을 때 실행되는 메서드를 적어놓았는데 버튼을 눌러도 메서드가 실행되지 않는 오류를 겪었다. 그 때 button을 lazy var로 구성하니 메서드 실행이 가능해졌다. -이유도 모르고 사용하는 것보다 lazy가 하는 역할이 무엇인지 정확히 개념을 파악하고 사용하는 것이 중요하기 때문에 deep diving 해보고자 한다. lazy -lazy stored property(지연 저장 속성)은 해당 인스턴스가 초기화 될 때 초기화되지 않고, 이 property에 처음 접근하는 시점에 초기화된다. (초기화 시점을 지연시켜주는 역할) -메모리를 관리하기 위해서 코드를 짤 때 메모리 비용이 많이 들어갈 수 있는 작업은 최대한 지양하는 것이 중요하다. .. 2022. 10. 7.
순환참조에 관하여 -강한 순환 참조란 두 객체가 서로를 strong(강한) 참조하고 있을 때, 서로가 서로를 참조하기 때문에 둘 다 메모리가 해제되지 않는 현상을 말한다. -강한 순환 참조는 메모리 누수를 발생시킨다. 메모리 누수란 필요 없는 메모리가 해제되지 않고, 계속 남아있는 상황을 말한다. 이것은 앱의 성능을 저하시킨다. -Swift는 ARC를 통해 Reference counting을 해서 메모리를 자동으로 해제시켜준다고 했다. 하지만 ARC는 강한 순환 참조까지 방지해주는 기능은 없다. 따라서 이 문제를 피하기 위한 학습을 해야한다. strong reference(강한 참조) -강한 참조는 Swift에서 가장 기본적인 참조 유형이다. class MyClass { var name: String init(name: .. 2022. 9. 28.