Swift 기초문법 27

Swift: 고차함수(map, filter, reduce)

고차함수 란? 다른 함수를 전달 인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수 map, filter, reduce 모두 3가지가 있는데 콜렉션타입에 구현이 되어 있다. → map 부터 알아보자. map 함수는 컨테이너 내부에 기존데이터에서 변형하여 새로운 컨테이너를 생선한다. 위 코드를 보면 numbers라는 인트형 배열이 선언되어 있고, 배열의 초기값으로 0, 1, 2, 3이 들어가 있는데 맵의 고체함수를 이용해서 numbers Array의 요소를 불러와 2씩 곱해준값을 반환하게 되면 mapArray변수에는 numbers배열에 2가 곱해진값이 새로 생성된다. mapArray변수를 출력해보면 mapArray배열에 0, 2, 4, 6이 들어있는걸 확인할 수 있다. 이렇게 map은 컨테이너 내부에 ..

Swift 기초문법 2022.03.19

Swift: 클로저(Closure)

클로저란? 참조타입이고, 코드에서 전달 및 사용할 수 있는 독립 기능 블록이며, 일급 객체의 역할을 할 수 있다. 전달인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 함수의 반환 값이 될 수도 있다. → 보통 클로저라 하면 이름없는 함수 익명함수를 지칭한다. 따라서 클로저는 네임드 클로저, 언네임드 클로저 둘 다 포함하지만 보통 언네임드 클로저를 말한다. 클로저 표현식은 다음과 같이 표현한다. 익명함수라서 func라는 키워드를 사용하지 않고, 클로저는 클로저헤드와 클로저바디로 이루어져 있는데 노란색 안에 있는 부분이 클로저헤드, 빨간색안에 있는부분이 클로저바디. 그리고 이 둘을 구분짓는게 in이라는 키워드이다. 클로저를 선언해보았다. 클로저는 익명이긴 하지만 함수이고 따라서 swi..

Swift 기초문법 2022.03.19

Swift: try-catch

try - catch 에러처리란? 프로그램 내에서 에러가 발생한 상황에 대해 대응하고 이를 복구하는 과정 swift에서는 런타임에 에러가 발생한 경우 이를 처리하기 위해서 1급 클래스를 제공한다 발생(throwing) 감지(catching) 전파(propagating) 조작(manipulating) → swift에서 에러는 에러프로토콜을 따르는 타입의 값으로 표현된다. 에러프로토콜은 요구사항이 없는 빈 프로토콜이지만 오류를 표현하기 위해서는 이 프로토콜을 채택해야 한다. swift열거형은 오류원인을 나누고 해당오류에 특성에 대한 추가정보를 전달하는 모델을 만드는데 적합하다. 그러면 PhoneError라고 네이밍을 하고, Error프로토콜을 채택을 하였다. Error종류로 case unknown을 만들어주..

Swift 기초문법 2022.03.19

Swift: 옵셔널체이닝

옵셔널체이닝 옵셔널에 속해 있는 nil일지도 모르는 프로퍼티, 메소드, 서브스크립션등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정 옵셔널에 값이 있다면 프로퍼티, 메소드등을 호출할 수 있고, 옵셔널이 nil이라면 프로퍼티, 메소드 등은 nil을 반환한다. → Developer라는 구조체를 정의해보자. 구조체를 정의하기 위한 struct키워드를 사용하고 Developer라는 네이밍으로 정의하여 구조체를 만들고, 이 블록안에 name이라는 프로퍼티 상수를 선언하였다. 그 다음 Company라는 이름의 구조체를 또 생성하고, name이라는 프로퍼티 상수를 선언하고, developer라는 프로퍼티라는 변수를 선언하여 옵셔널타입을 갖게 선언한다. 그리고 Company라는 구조체의 인스턴스도 생성해준다. 그..

Swift 기초문법 2022.03.19

Swift: 열거형(enum, case, rawValue)

열거형 : 연관성이 있는 값을 모아 놓은 것을 말한다. 열거형을 만들게 되면 하나의 새로운 타입처럼 사용할 수 있다. 그렇기 때문에 열거형은 swift의 이동규칙에 따라 이름을 대문자로 시작해야 한다. 열거형 변수를 만들어보자. 열거형을 사용하기 위해서는 enum이라는 키워드를 사용하면 된다. → CompassPoint라고 네이밍을 정의하고, case키워드를 이용해서 CompassPoint와 연관된 항목을 나열해보자. 방향을 뜻하는 north, south, east, west라는 연관된 항목을 적어준다. 이렇게 되면 CompassPoint라는 이름을 갖는 열거형에는 north, south, east, west라는 연관된 항목이 선언이 된다. 각 항목은 그 자체가 고유값이며 항목을 한줄로도 나열이 가능하고..

Swift 기초문법 2022.03.19

Swift: 익스텐션(extension)

익스텐션(extension) : 기존의 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가하는 기능 익스텐션이 타입에 추가할 수 있는 기능 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메소드 / 인스턴스 메소드 이니셜라이저 서브스크립트 중첩타입 특정 프로토콜을 준수할 수 있도록 기능 추가 → 연산프로퍼티 메소드기능 추가에 대해 알아보자. extension을 사용하기 위해서는 extension키워드를 사용해야 한다. 그래서 다음 키워드를 적고, 그 다음 기능을 추가할 타입의 이름을 적어주면 된다. 그러면 extension을 통해서 type의 연산프로퍼티에 대해 추가해보자. → extension을 추가해주고 Int형 타입의 연산프로퍼티를 추가해 기능을 확장해 보자. Int형 값이 짝수인지 홀수인..

Swift 기초문법 2022.03.19

Swift: 프로토콜(protocol)

프로토콜 : protocol 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항 등의 청사진(설계) 구조체 클래스 열거형은 프로퍼티를 채택해서 특정기능을 실행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있다. 이때 프로토콜이 요구하는 사항을 모두 충족하면 해당타입이 채택한 프로토콜을 준수하다고 말할 수 있다. → protocol을 정의하는 방법은 위코드와 같다. protocol키워드를 적고 protocol 이름과 함께 코드블록 안에는 프로토콜의 요구사항을 정의하면 된다. → protocol 키워드를 적어주고 이름은 SomeProtocol이라고 해주었다. 이렇게 하면 SomeProtocol이라는 protocol이 정의가 되었다. 구조체에 우리가 정의한 SomeProtocol을 채택하도록 하였다...

Swift 기초문법 2022.03.19

Swift: assert, guard

assert? 특정 조건을 체크하고, 조건이 성립되지 않으면 메세지를 출력하게 할 수 있는 함수 assert함수는 디버깅 모드에서만 동작하고 주로 디버깅 중 조건의 검증을 위하여 사용한다. guard문 뭔가를 검사하여 그 다음에 오는 코드를 실행할지 말지 결정 하는 것 guard문에 주어진 조건문이 거짓일 때 구문이 실행됨 주로 guard문을 이용해 특정조건을 만족하지 않으면 이웃코드를 실행하지 않도록 방어코드로 많이 사용한다. → value라는 변수를 선언해주고 초기값을 0으로 지정해주었다. assert함수를 통해 value가 0인지 비교연산자 ==를 통해 value가 0인지 검증을 해보자. 그 다음은 value에 값을 2를 주어 변경하고, assert를 이용해 똑같이 value 값이 0인지 검증하고,..

Swift 기초문법 2022.03.19

Swift: 타입캐스팅

타입캐스팅이란? 인스턴스의 타입을 확인하거나 어떠한 클래스의 인스턴스를 해당클래스 계층 구조의 슈퍼클래스나 서브 클래스로 취급하는 방법. 인스턴스의 타입을 확인할 수도 있고 인스턴스타입을 슈퍼클래스 또는 서브클래스처럼 다루기 위해 사용하는 것. Swift에서는 타입캐스팅을 is와 as라는 연산자로 구현이 가능하다. 이 두 연산자는 값의 타입을 확인하거나 값을 다른타입으로 변환하는데 사용한다. → 위 코드는 타입캐스팅의 동작을 확인하기 위해서 MediaItem이라는 class를 만들었다. → 그리고 MediaItem을 상속하는 Movie클래스, Song클래스도 정의되어 있다. 이를 사용해서 타입캐스팅을 사용해보자. → 위 코드의 library배열을 보면 Movie클래스와 Song클래스의 인스턴스들이 들어있..

Swift 기초문법 2022.03.19

Swift: 상속(슈퍼클래스,서브클래스,override,final)

상속 : 부모가 자식에게 재산을 물려주는 행위 Swift에서 상속은 class가 다른 class로 부터 메소드, 프로퍼티 또는 다른특성들을 상속받는것을 말한다. 한 class가 다른 class를 상속할 때 상속받는 클래스를 자식클래스, 서브클래스라고 부르고, 상속하는 클래스를 부모클래스, 슈퍼클래스라고 부른다. 상속은 Swif의 다른타입과 클래스를 구별짓는 클래스만의 특징이다. Swift의 class는 부모클래스로부터 물려받은 메소드, 프로퍼티, 서브스크립트를 호출하거나 접근할 수 있다. 그리고 오버라이딩을 통하여 물려받은 메소드, 프로퍼티, 서브스크립트 등을 자신만의 내용으로 재정의 할 수 있다. 또 상속받은 프로퍼티의 값이 변경 되었을때 알려주는 프로퍼티 감시자도 구현할 수 있다. 부모클래스에서 연산..

Swift 기초문법 2022.03.18