ios(27)
-
[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 -
[iOS] Delegate Pattern 이해하기
Delegate Pattern을 이해하기 위해서는 반드시 프로토콜에 대한 학습이 선행되어야 한다. 프로토콜을 먼저 학습하고 읽을 것을 권장한다. https://daltonic.tistory.com/31 Delegate Pattern 이란? 델리게이트 패턴(위임 패턴)이란 디자인 패턴으로 어떤 객체(클래스의 인스턴스)가 자신이 가지고 있는 일들 중 일부분을 다른 객체에게 위임하여 처리시키는 패턴을 말한다. 조금 안 와닿을 수 있는데, 속된 말로 짬 때린다(?)라고 이해하면 편할 것 같다. 쉽고 편한 이해를 위해 델리게이트 패턴을 적용시켜서 어떻게 짬을 때리는지 보자! 우선 어떤 일을 시킬 건지 프로토콜을 만들어줬다. 소대장 대신 팀의 건강을 체크하고 훈련을 시킬 예정이다. 다음으로 팀멤버뷰컨트롤러와 소대장..
2022.01.16 -
[iOS_Swift] Properties - 연산 프로퍼티(Computed Property)
연산프로퍼티란? Swift 문서에 따르면, 연산프로퍼티는 클래스, 구조체, 열거형에서 정의되어질 수 있고 실제로 어떤 값을 저장하지 않으며, 대신 getter와 optional setter를 제공하고 다른 프로퍼티들과 값들을 간접적으로 set한다고 나와있다. 요약해서 쉽게 말하자면 연산프로퍼티란, 저장프로퍼티와 달리 특정한 값을 저장하지 않고 어떤 프로퍼티와 값들을 연산해서 새로운 값을 설정해주는 프로퍼티이다. 예시를 통해 이해해보자. 애플 예시를 활용해보려 했는데, 한번에 머릿 속에 팍 들어오는 예시는 아니어서 다른 간단한 걸로 만들었다. 구조체를 총 3개를 만들어줬고 군인의 총점수를 얻기 위한 연산프로퍼티를 구현했다. 연산프로퍼티는 위의 totalScoreCalculate처럼 표현해주면 된다. get..
2022.01.13