앱개발 28

UIKit란?

본 게시글은 edwith 부스트코스 iOS 프로그래밍 강의를 듣고 작성한 게시글 입니다. UIKit란? UIKit은 iOS 애플리케이션의 사용자 인터페이스를 구현하고 이벤트를 관리하는 프레임워크이다. UIKit 프레임워크는 제스처 처리, 애니메이션, 그림 그리기, 이미지 처리, 텍스트 처리 등 사용자 이벤트 처리를 위한 클래스를 포함한다. 또한 테이블뷰, 슬라이더, 버튼, 텍스트 필드, 얼럿 창 등 애플리케이션의 화면을 구성하는 요소를 포함한다. UIKit 클래스 중 UIResponder에서 파생된 클래스나 사용자 인터페이스에 관련된 클래스는 애플리케이션의 메인 스레드(혹은 메인 디스패치 큐)에서만 사용해야 한다. UIKit은 iOS와 tvOS 플랫폼에서 사용한다. UIKit 기능별 요소 사용자 인터페이..

👩🏻‍💻/iOS 2020.07.12

부스트코스 - iOS 프로그래밍을 위한 스위프트 기초 강의 수료 및 후기

iOS 공부를 하기로 마음 먹고 첫걸음으로 듣기 시작한 첫 강의를 수강완료했다. 이 강의에서 권장한 수강 기간은 약 2달 정도인데 일주일 조금 넘게동안 조금은 빠르게 수료 해버렸다. 생각보다 강의 양도 많지 않았고, 기초이기 때문에 다른 언어에서 공부했던 문법이나 내용과 비슷한 부분이 많아서 어렵지 않게 공부할 수 있었다. 물론 스위프트에는 강의에서 들은 내용 뿐 아니라 훨~~씬 더 많은 기능들이 있겠지만, 프로젝트를 하며 공부를 하면 괜찮을 거라는 생각을 했다. 워낙 이론 위주로 공부를 하면 잘 안들어오는 타입이기도 하고, 학부때부터 느꼈지만 직접 구현하면서 스스로 찾고 공부하는게 기억에 더 잘 남는다. 동영상 강의 하나하나가 길지 않다. 오히려 짧다고 하면 매우 짧다. 3분~10분 사이로 이루어져 있..

잡담 2020.06.24

28. 고차 함수 - iOS 프로그래밍을 위한 스위프트 기초

- 고차 함수 고차 함수(Higher-order function)는 '다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수'를 뜻한다. 스위프트의 함수(클로저)는 일급시민(일급객체)이기 때문에 함수의 전달인자로 전달할 수 있으며, 함수의 결과값으로 반환할 수 있다. 이번 파트에서는 스위프트 표준라이브러리에서 제공하는 유용한 고차함수[map, filter, reduce]에 대해 알아본다. map, filter, reduce 함수는 스위프트 표준 라이브러리의 컨테이너 타입(Array, Set, Dictionary 등)에 구현되어 있다. - map map함수는 컨테이너 내부의 기존 데이터를 변형(transform)하여 새로운 컨테이너를 생성한다. - filter filter함수는 컨테이너 내부..

27. 오류 처리 - iOS 프로그래밍을 위한 스위프트 기초

- 오류 처리 스위프트에서 오류(Error)는 Error라는 프로토콜을 준수하는 타입의 값을 통해 표현된다. Error 프로토콜은 사실상 요구사항이 없는 빈 프로토콜일 뿐이지만, 오류를 표현하기 위한 타입(주로 열거형)은 이 프로토콜을 채택한다. 스위프트의 열거형은 오류의 종류를 나타내기에 아주 적합한 기능이다. 연관 값을 통해 오류에 관한 부가 정보를 제공할 수도 있다. 이번 예제에는 프로그램 내에서 자판기를 작동시키려고 할 때 발생하는 오류상황을 구현해 보았다. - 오류 표현 Error 프로토콜과 (주로)열거형을 통해서 오류를 표현한다. 자판기 동작 오류의 종류를 표현한 VendingMachineError 열거형 - 함수에서 발생한 오류 던지기 자판기 동작 도중 발생한 오류를 던지는 메서드를 구현해본..

26. 익스텐션 - iOS 프로그래밍을 위한 스위프트 기초

- 익스텐션 익스텐션(Extension) 은 스위프트의 강력한 기능 중 하나이다. 익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가 할 수 있는 기능이다. 기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수도 있다. 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드 / 인스턴스 메서드 이니셜라이저 서브스크립트 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 ** 익스텐션은 타입에 새로운 기능을 추가할 수는 있지만, 기존에 존재하는 기능을 재정의할 수는 없다. 이 둘은 비슷해보이지만 실제 성격은 많이 다르다. 클래스의 상속은 클래스 타입에서만 가능하지만 익스텐션은 구조체, 클래스, 프로토콜 등..

25. 프로토콜 - iOS 프로그래밍을 위한 스위프트 기초

- 프로토콜 프로토콜(Protocol) 은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의한다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted) 해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜을 준수한다(Conform) 고 표현한다. 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 한다. 즉, 프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하지는 않는다. - 정의 protocol 키워드를 사용하여 정의한다. protocol 프로토콜 이름 { /* 정의부 */ ]} - 구현 프로퍼티 요구는 항상 var 키워드를 사용한..

24. assert / guard - iOS 프로그래밍을 위한 스위프트 기초

애플리케이션이 동작 도중에 생성하는 다양한 연산 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있다. - Assertion assert(_:_:file:line:) 함수를 사용한다. assert 함수는 디버깅 모드에서만 동작한다. 배포하는 애플리케이션에서는 제외된다. 예상했던 조건의 검증을 위하여 사용한다. * assert(_:_:file:line:)와 같은 역할을 하지만 실제 배포 환경에서도 동작하는 precondition(_:_:file:line:) 함수도 있다. - guard(빠른종료- Early Exit) guard를 사용하여 잘못된 값의 전달 시 특정 실행구문을 빠르게 종료한다. 디버깅 모드 뿐만 아니라 어떤 조건에서도 동작한다. guard의 else 블럭 내부..

23. 타입 캐스팅 - iOS 프로그래밍을 위한 스위프트 기초

- 스위프트 타입 캐스팅 인스턴스의 타입을 확인 하는 용도 클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인 하는 용도 is, as를 사용한다. * 형변환은 'ex. let someDouble = Double(2)' 타입 캐스팅이 아니라 새로운 값을 생성하는 것이다. - 예제 클래스 - 타입확인 is를 사용하여 타입을 확인한다. - 업 캐스팅(Up Casting) as를 사용하여 부모클래스의 인스턴스로 사용할 수 있도록 컴파일러에게 타입정보를 전환해준다. Any 혹은 AnyObject로도 타입정보를 변환할 수 있다. 암시적으로 처리되므로 꼭 필요한 경우가 아니라면 생략해도 무방하다. - 다운 캐스팅(Down Casting) as? 또는 as!를 사용하여 자식 클래스의 인스턴스로..

22. 옵셔널 체이닝과 nil 병합 - iOS 프로그래밍을 위한 스위프트 기초

- 옵셔널 체이닝 옵셔널 체이닝은 옵셔널의 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하게 활용할 수 있다. 매번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인할 수 있다. - nil 병합 연산자 중위 연산자이다. ?? Optional ?? Value 옵셔널 값이 nil일 경우, 우측의 값을 반환한다. 띄어쓰기에 주의하여야 한다.

21. 인스턴스 생성 / 소멸 (init / deinit) - iOS 프로그래밍을 위한 스위프트 기초

인스턴스를 생성하는 이니셜라이저와 클래스의 인스턴스가 소멸될 때 호출되는 디이니셜라이저, 그리고 이와 관련된 것들에 대해 알아보겠다. 프로퍼티 초기값 이니셜라이저 init 디이니셜라이저 deinit - 프로퍼티 초기값 스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 한다. 프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 된다. 1. 이니셜라이저(initializer) 프로퍼티 초기값을 지정하기 어려운 경우에는 이니셜라이저 init을 통해 인스턴스가 가져야 할 초기값을 전달할 수 있다. 프로퍼티의 초기값이 꼭 필요 없을 때 옵셔널을 사용! class 내부의 init을 사용할때는 convenience 키워드 사용 암시적 추출 옵셔널은 인스..