Programming(38)
-
[iOS_Swift] inout Parameter에 대하여
오늘은 간단한 개념에 대해서 짚고 넘어가보려 한다. 원래는 제네릭 관련 글을 포스팅하려다가 공식 문서를 살펴보고 있었는데, 공식 문서 예시에서 inout 파라미터를 사용하고 있었다. 처음 보는 개념이어서 해당 개념을 학습하다가 결국 글까지 포스팅하게 됐다. 먼저 inout Parameter 공식 문서부터 살펴보자. 총 세 문단으로 이뤄져 있고 핵심 내용만 요약해서 설명하면, 함수의 파라미터들은 기본적으로 상수이다. 따라서, 함수의 파라미터 값들을 함수 내부 바디에서 바꾸려고 하면 컴파일 에러를 일으킨다. 만약 사용자가 파라미터의 값들을 바꿔주고, 해당 값이 함수가 끝난 뒤에도 유지되기를 원한다면 inout 파라미터를 사용할 수 있다. 사용자는 inout 키워드를 파라미터 타입 좌측에 적어 둠으로써 사용할..
2022.02.10 -
[iOS_Swift] Properties - 지연 저장 프로퍼티(Lazy Stored Property)
지연 저장 프로퍼티란? 우선 공식문서의 정의를 살펴보면, 지연 저장 프로퍼티는 해당 프로퍼티가 처음으로 사용되어지기 전까지 최초의 값을 계산하지 않는 프로퍼티이다. 즉 사용되어지기 전까지는 nil을 할당 받는 것이다. 지연 저장 프로퍼티가 대충 무엇인지는 이제 알겠다. 그렇다면 이 개념을 언제 사용하고 왜 알아두면 유용한지 구체적으로 이해해보자. 언제 사용할까? 1. 어떤 프로퍼티의 최초 값이 외부 다른 인스턴스의 영향을 받을 때. 이 부분을 이해하기 위해서는 공식 문서에 있는 예시 코드를 잠시 활용해보자. 위의 예시 코드를 보면, 2개의 클래스 DataImporter, DataManager가 있다. 그리고 DataManager클래스의 프로퍼티 중에 DataImporter의 인스턴스를 가지는 지연 저장 ..
2022.02.06 -
[iOS_Swift] mutating에 대하여
오늘은 구조체와 열거형에서 사용되는 mutating 키워드에 대해 다뤄보려고 한다. 먼저 늘 그렇듯 문서부터 살펴보자! 중요 부분만 해석해보면, 기본적으로 클래스가 아닌 구조체나 열거형은 값 타입이므로 인스턴스 메서드 내에서 구조체나 열거형의 프로퍼티들을 수정할 수 없다. 그런데 만약 사용자가 구조체나 열거형의 특정 인스턴스 메서드를 통해 어떤 프로퍼티의 값을 수정할 필요가 있다면 수정할 수 있게 만들 수 있다! 라고 설명하고 있다. 그걸 가능하게 해주는 것이 바로 mutating 키워드이다. 간단한 예시를 통해 보자. 군인 구조체의 인스턴스 메서드 하드트레이닝을 통해서 skill 프로퍼티를 1씩 증가시켜주려고 했다. 그런데 위와 같은 컴파일 에러가 발생한다. 구조체는 값 타입이기 때문에 기본적으로 모든..
2022.02.03 -
[iOS_Swift] 타입 메서드 - class func과 static func의 차이
본론에 들어가기에 앞서, 타입 메서드가 무엇인지, 일반적으로 우리가 쓰는 인스턴스 메서드와 무슨 차이가 있는지 짚고 넘어가자. Type Method(타입 메서드)란? 공식문서에 따르면, 타입 메서드는 인스턴스 메서드와 달리 타입 그 자체에서 호출 되어지는 메서드라고 설명하고 있다. 즉 통상적으로 우리가 사용하는 인스턴스 메서드는 어떤 구조체나 클래스의 인스턴스를 만들어 준 뒤 메서드 접근이 가능했다. 그런데 타입 메서드의 경우, 인스턴스를 따로 만들어줄 필요 없이 타입에서 바로 접근이 가능하다. 타입 메서드의 종류는 크게 static 키워드를 사용한 메서드 한 종류이나, 클래스의 경우 class 키워드를 사용해서 추가적으로 타입 메서드를 만들 수 있다. 단, class 키워드를 사용한 타입메서드의 경우 ..
2022.01.28 -
[iOS_Swift] Swift Attributes - discardableResult, frozen에 대하여
Swift언어에는 Attributes라고 하는 개념이 존재한다. 오늘은 그 중에서 discardableResult와 frozen에 대해 다뤄보려고 한다. 우선, Attributes 개념이 무엇인지 이해하고 넘어가자. Attributes란? Attributes는 한글로 표현하면 '속성'으로 표현한다. 그런데, 속성으로 공부하기보다는 영단어 Attributes 그대로 받아들이는게 좀 더 이해하는데에 편할 것 같다. 공식 문서에 따르면 어트리뷰트는 declarations과 types에 적용할 수 있다고 설명하고 있다. 즉, 쉽게 정리하면 어트리뷰트는 선언이나 타입에 적용되는 추가 특성 같은 것이라고 이해하면 편할 것 같다. 어트리뷰트는 두 가지로 분류되며 선언 어트리뷰트, 타입 어트리뷰트로 나눠진다. 사실 어..
2022.01.23 -
[iOS_Swift] deinit이 호출되지 않는 이유
프로젝트를 만들 때, 간혹 뷰컨트롤러를 분명히 Pop 했음에도 해당 뷰컨트롤러의 소멸자가 호출이 되지 않는 경우가 존재할 수 있다. 이럴 경우에는 해당 뷰컨트롤러를 더 이상 사용하지 않음에도 불구하고 메모리에서 계속 해당 뷰를 붙잡아두고 있는 것을 의미한다. 이는 메모리 누수(Memory Leak)에 해당하며, 앱의 속도를 떨어뜨릴 수 있고 심해진다면 Out of Memory 크래시를 일으킬 수 있다. deinit이 호출되지 않는 이유는 다음과 같은 몇 가지 케이스들이 있다. 1. 프로토콜 타입의 변수가 강한 참조를 하고 있을 때 위와 같은 코드의 경우, 클래스 내에 프로토콜 타입의 변수 하나를 선언해줬다. 해당 변수는 현재 강한 참조를 하고 있기 때문에, SecondViewController를 강하게 ..
2022.01.19