ios(27)
-
[iOS_Swift] 프로퍼티 감시자(Property Observers)(코드x)
프로퍼티 감시자란? 어떤 저장프로퍼티와 부모클래스로부터 상속받은 저장프로퍼티, 연산프로퍼티에 새로운 값이 할당될 때, 그러한 변화들을 관찰하고 호출(respond)하는 역할을 수행하는 것이다. 프로퍼티 감시자의 특징 1. 프로퍼티의 값이 변경될때마다 호출됨.(~~~~called every time a property's value is set.) 2. 새로운 값이 기존의 값과 같더라도 호출됨.(~~~~even if the new value is the same as the property current value.) 3. 지연저장프로퍼티에는 감시자를 넣을 수 없음.(~~~~except for lazy stored properties.) 3. 부모클래스로부터 상속받은 저장프로퍼티, 연산프로퍼티에도 넣을 수..
2021.12.18 -
포스트모템(Post-mortem)
포스트 모템이란? 사후 검증으로 어떠한 사고가 발생하고 수습한 뒤, 해당 사고의 원인을 규명하고 잘못한 점들을 바로잡아 다음에 이러한 사고가 발생하는 것을 막기 위한 과정이다. 해당 개념을 상세하고 쉽게 잘 설명한 글들이 많아서 아래의 링크를 찾고하면 좋을 것 같다. https://ashurang.tistory.com/entry/%ED%8F%AC%EC%8A%A4%ED%8A%B8%EB%AA%A8%ED%85%9CPostmortem%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90 https://brunch.co.kr/@svillustrated/13#comment 사실 포스트 모템이라는 것이 프로그래밍 쪽에서만 통용되는 것은 아니다. 우리는 생..
2021.12.05 -
[iOS_Swift] 클로저(1) - 1급 객체(First-class Citizen)
클로저를 이해하기 위해서는 먼저 1급 객체(First-class Citizen)에 대한 이해가 반드시 수반되어야한다. 1급 객체란 어떠한 객체가 다음과 같은 조건을 만족할 때 1급 객체라고 한다. 1. 변수나 상수에 객체를 저장할 수 있는가? 2. 객체를 어떤 함수의 매개변수로 전달할 수 있는가? 3. 객체를 어떤 함수의 반환값으로 지정할 수 있는가? 이러한 조건을 충족할 때 우리는 해당 언어를 함수형 프로그래밍 언어라고 할 수 있다. 개인적으로 여기서 객체라는 개념이 늘 헷갈리는데(클래스나 구조체의 인스턴스 등) 여기서 말하는 객체, 함수형 프로그래밍 언어에서의 1급 객체는 '함수'를 의미하기도 한다! 좀 더 자세하게 함수가 어떻게 1급 객체의 요건을 충족시키는지 살펴보자 1. 변수나 상수에 객체(함수..
2021.10.25 -
[iOS_Swift] guard, guard let문
요즘 Guard문을 타입캐스팅을 할 때나 옵셔널바인딩을 할 때 주로 활용 중인데, 이걸 내가 제대로 이해를 못하고 쓰는 느낌이 강해서 개인적으로 정리가 필요했다. guard문 guard문에 대해서 먼저 이해를 해보자면, guard문은 if ~ else문처럼 일종의 조건문이라고 이해하면 쉬울 것 같다. 둘의 차이점은 guard문이 if문에 비해서 상대적으로 간결하고 읽기 좋은 코드를 작성할 수 있다는게 첫 번째 차이점이며, 두 번째 차이점은 guard문의 경우 return, break 등의 명령어가 반드시 필요하다. 예시를 통해 보자. 숫자가 3보다 큰지를 판단하는 함수 안에 guard문과 if else문을 두개 다 넣었다. 두개다 모두 같은 결과를 반환하며, guard문이 확실히 간결하고 읽기 편하다는 ..
2021.10.20 -
[iOS_Swift] 클래스(class)와 구조체(struct)의 이니셜라이저(initializer)
기본적으로 클래스와 구조체는 인스턴스를 생성하는 과정에서 초기화를 반드시 하게 된다. 코드 상에서는 init이라고 표시된다. 예시를 통해 보자. 위 예시를 보면 따로 init이 보이지 않는다. 그러면 초기화를 하지 않은 것인가? 라고 생각할 수 있는데 이렇게 저장프로퍼티에 기본값이 할당되어 있다면 따로 사용자 정의 이니셜라이저를 만들지 않아도 기본적인 이니셜라이저가 자동으로 실행이 된다. 또한 인스턴스 student1에도 초기값을 할당하지 않고 생략해도 된다. 이거에 대한 이유 또한 프로퍼티에 기본값이 있기 때문이다. 위 예시와는 약간 달라졌는데 이번에는 이니셜라이저가 추가됐고 프로퍼티에 기본값을 할당하지 않은 대신에 이니셜라이저에 초기값을 할당했다. 그럼에도 결과는 동일하다. 그런데 만약에 나는 클래스..
2021.10.18 -
[iOS_Swift] 타입 캐스팅(Type Casting)
타입 캐스팅(Type Casting) 타입 캐스팅이란 최대한 간단히 이해해보기 위해 직역하자면 '타입을 확인하고 정하는 것'이다. 그렇다면 구체적으로 이게 무슨 뜻이고 뭘 확인하고 정하는 것일까. 두 가지 케이스로 나눌 수 있는데, 첫 번째로 만약 어떠한 인스턴스가 존재할 때, 우리는 그 인스턴스가 어떠한 타입의 인스턴스인지 명확히 확인하고 싶을 때, 두 번째로 그 인스턴스를 다른 어떤 타입의 인스턴스로 전환시켜서 활용하고 싶을 때 우리는 타입 캐스팅을 할 수 있다. 타입 캐스팅 관련 연산자는 크게 세 가지가 존재한다. 1. 타입 확인 연산자 : is 2. 타입캐스트 연산자 : as!, as? 첫 번째 케이스처럼 인스턴스가 어떠한 타입의 인스턴스인지 활용할 때는 타입 확인 연산자 is 를 활용하며 반환값..
2021.10.17