SWIFT(27)
-
[iOS_Swift] 클로저(2) - 기본 클로저
1편에서 클로저를 이해하기 위해 1급 객체에 대해 알아봤으니 본격적으로 클로저를 이해하고 어떻게 사용하면 좋을지 알아보려고 한다. 우선 클로저란 사용자의 코드에서 전달 및 사용할 수 있는 독립된 기능 블록이라고 한다. 이해가 잘 안가는 말인데 쉽게 생각하면 앞으로 사용하고 부르게 될 클로저들은 '이름 없는 함수'로 생각하면 편할 것 같다. 정확한 설명은 절대아니다! 이해의 편의를 위해.. 정확하게 클로저에 대해 분류를 하면 Named Closure, Unnamed Closure로 나눠 진다. 여기서 Named Closure가 우리가 흔히 알고 사용하는 함수이다. 즉 함수는 클로저의 일종인 것이다! Unnamed Closure가 바로 앞으로 계속 다루게 될 녀석이다. 즉 앞으로 언급하는 클로저는 전부 앞에..
2021.11.03 -
[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 -
[iOS_Swift] 옵셔널(Optional), 옵셔널 바인딩(Optional Binding), 옵셔널 체이닝(Optional Chaining)
옵셔널(Optional) 옵셔널이란 간단하게 생각하면 어떤 상수나 변수로 선언된 타입(String, Int...)에 nil값이 있을 수도 있다는 조심스러운 기능이다. 조심스러움을 알 수 있는 한 예로 타입의 뒤에 ?를 넣어서 표현해준다. var nickname: String? var age: Int? 조금 더 명확하게 써주려면 var nickname: Optional 도 가능하다. 그러나 ? 하나만 써주는게 간단하고 편하다. 그러면 이런 옵셔널을 우리는 왜 굳이 사용해야 할까? 변수나 상수에 꼭 nil이 있을거라고 가정해야할 필요가 있을까. 그 이유는 다음과 같은 예로 생각하면 쉬울 것 같다. 가령 우리가 어떤 함수를 만들었다고 가정해보자. 해당 함수에는 매개변수가 있을 것이고 매개변수를 통해 우리는 외..
2021.10.14