Programming(38)
-
[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 -
[iOS_Swift] Properties - 저장 프로퍼티(Stored Properties), Instance
핵심만 쉽게 풀어서 이해해보자면, Property란 어떠한 value 값을 특정 클래스, 구조체, 열거형에 연결시켜준다. 프로퍼티에는 저장 프로퍼티, 연산프로퍼티, 타입프로퍼티 등이 존재하는데, 여기서는 프로퍼티의 종류 중 Stored Properties에 관한 내용만 우선 다뤄보자. 1문단 2번째 줄에 의하면, 저장 프로퍼티는 인스턴스의 일부로서 상수와 변수값들을 저장한다. 즉, 특정 클래스나 구조체 내의 변수나 상수값을 저장 프로퍼티로 저장한다는 뜻이다. 스위프트 문서의 예시를 빌려서 살펴보자면, FixedLengthRange 라는 구조체내의 변수로 선언된 firstValue와 상수로 선언된 length는 저장 프로퍼티로서 Instance에 활용이 된다. 즉 변수 구조체 rangeOfThreeItem..
2021.09.30