본문 바로가기

야곰

블로그 이전안내 티스토리 블로그는 그대로 두고 새 블로그로 이전합니다. https://blog.yagom.net 에서 다시 만나요 :) 더보기
사진 게시판 API 만들기 [6] Perfect 미니 프로젝트 [6] 1. 게시물 삭제 API CRUD 중 마지막! Delete에 해당하는 API를 만들어 봅니다!! 참고2017년 8월 현재 Swift 3 / Perfect 최신버전 2.0.x 환경에서 진행함을 알려드립니다.* Swift 최신 버전 확인(https://github.com/apple/swift/releases)* Perfect 최신 버전 확인(https://github.com/PerfectlySoft/Perfect/releases) 지난 내용 돌아보기2017/06/27 - [Swift/Perfect] - 사진 게시판 API 만들기 [1]2017/07/11 - [Swift/Perfect] - 사진 게시판 API 만들기 [2]2017/08/09 - [Swift/Perfect] .. 더보기
사진 게시판 API 만들기 [5] Perfect 미니 프로젝트 [5] 1. 게시물 수정 API CRUD 중 Read에 해당하는 API를 만들어 봅니다!! 참고2017년 8월 현재 Swift 3 / Perfect 최신버전 2.0.x 환경에서 진행함을 알려드립니다. * Swift 최신 버전 확인(https://github.com/apple/swift/releases) * Perfect 최신 버전 확인(https://github.com/PerfectlySoft/Perfect/releases) 지난 내용 돌아보기2017/06/27 - [Swift/Perfect] - 사진 게시판 API 만들기 [1] 2017/07/11 - [Swift/Perfect] - 사진 게시판 API 만들기 [2] 2017/08/09 - [Swift/Perfect] - 사.. 더보기
사진 게시판 API 만들기 [4] Perfect 미니 프로젝트 [4] 1. 게시물 정보 API 2. 게시물 목록 API CRUD 중 Read에 해당하는 API를 만들어 봅니다!! 참고2017년 8월 현재 Swift 3 / Perfect 최신버전 2.0.x 환경에서 진행함을 알려드립니다.* Swift 최신 버전 확인(https://github.com/apple/swift/releases)* Perfect 최신 버전 확인(https://github.com/PerfectlySoft/Perfect/releases) 지난 내용 돌아보기2017/06/27 - [Swift/Perfect] - 사진 게시판 API 만들기 [1]2017/07/11 - [Swift/Perfect] - 사진 게시판 API 만들기 [2]2017/08/09 - [Swift/Pe.. 더보기
사진 게시판 API 만들기 [3] Perfect 미니 프로젝트 [3] 1. 사진 게시물 등록하기 2. URL을 통해 사진 GET API를 하나씩 하나씩 완성해 나가도록 합시다!! 참고 2017년 7월 현재 Swift 3 / Perfect 최신버전 2.0.x 환경에서 진행함을 알려드립니다. * Swift 최신 버전 확인(https://github.com/apple/swift/releases) * Perfect 최신 버전 확인(https://github.com/PerfectlySoft/Perfect/releases) 지난 내용 돌아보기 2017/06/27 - [Swift/Perfect] - 사진 게시판 API 만들기 [1] 2017/07/11 - [Swift/Perfect] - 사진 게시판 API 만들기 [2] 사진 게시물 등록하기 먼저 C.. 더보기
기본문법을 마치며... 더 알아보기이제까지 포스팅한 내용 외에 추가적으로 알아가야 할 문법과 개념들을 모아봤습니다.제네릭(Generics)서브스크립트(Subscript)접근수준(Access Control)ARC(Automatic Reference Counting)중첩타입(Nested Types)사용자정의 연산자(Custom Operators) 스위프트 기본문법 강좌는 여기서 마칩니다. 많은 도움이 되었길 소망합니다. yagom Blog : http://blog.yagom.netFacebook : https://fb.com/yagomsoftFacebook Page : https://fb.com/yagompageFacebook Group : https://fb.com/groups/yagomContacts : https://yago.. 더보기
고차함수 고차함수고차함수(Higher-order function)은 '다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수'를 뜻합니다.스위프트의 함수(클로저)는 일급시민(first-citizen)이기 때문에 함수의 전달인자로 전달할 수 있으며, 함수의 결과값으로 반환할 수 있습니다. 이번 파트에서는 스위프트 표준라이브러리에서 제공하는 유용한 고차함수에 대해 알아봅니다.mapfilterreducemap, filter, reduce 함수는 스위프트 표준 라이브러리의 컨테이너 타입(Array, Set, Dictionary 등)에 구현되어 있습니다. 소스코드 mapmap함수(메서드)는 컨테이너 내부의 기존 데이터를 변형(transform)하여 새로운 컨테이너를 생성합니다. > 변형하고자 하는 numbe.. 더보기
오류처리 오류처리스위프트에서 오류(Error)는 Error라는 프로토콜을 준수하는 타입의 값을 통해 표현됩니다. Error 프로토콜은 사실상 요구사항이 없는 빈 프로토콜일 뿐이지만, 오류를 표현하기 위한 타입(주로 열거형)은 이 프로토콜을 채택합니다. 스위프트의 열거형은 오류의 종류를 나타내기에 아주 적합한 기능입니다. 연관 값을 통해 오류에 관한 부가 정보를 제공할 수도 있습니다. 이번 예제에는 프로그램 내에서 자판기를 작동시키려고 할 때 발생하는 오류상황을 구현해 보았습니다. 소스코드 오류표현Error 프로토콜과 (주로)열거형을 통해서 오류를 표현합니다enum 오류종류이름: Error { case 종류1 case 종류2 case 종류3 //... } > 자판기 동작 오류의 종류를 표현한 VendingMachi.. 더보기
익스텐션 익스텐션익스텐션(Extension) 은 스위프트의 강력한 기능 중 하나입니다. 익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가 할 수 있는 기능입니다. 기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수도 있습니다. 스위프트의 익스텐션이 타입에 추가할 수 있는 기능연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드 / 인스턴스 메서드이니셜라이저서브스크립트 중첩 타입특정 프로토콜을 준수할 수 있도록 기능 추가 익스텐션은 타입에 새로운 기능을 추가할 수는 있지만, 기존에 존재하는 기능을 재정의 할 수는 없습니다. 클래스의 상속과 익스텐션을 비교해보겠습니다. 이 둘은 비슷해보이지만 실제 성격은 많이 다릅.. 더보기
프로토콜 프로토콜프로토콜(Protocol)은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있습니다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜을 준수한다(Conform)고 표현합니다. 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 합니다. 즉, 프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하지는 않습니다. 소스코드 정의 문법protocol 키워드를 사용하여 정의합니다.protocol 프로토콜 이름 { /* 정의부 */ } 프로토콜 구현protocol Talkable .. 더보기
assert와 guard assert와 guard애플리케이션이 동작 도중에 생성하는 다양한 연산 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있습니다. 소스코드 Assertionassert(_:_:file:line:) 함수를 사용합니다. assert 함수는 디버깅 모드에서만 동작합니다. 배포하는 애플리케이션에서는 제외됩니다. 주로 디버깅 중 조건의 검증을 위하여 사용합니다.var someInt: Int = 0 // 검증 조건에 부합하므로 지나갑니다 assert(someInt == 0, "someInt != 0") someInt = 1 //assert(someInt == 0) // 동작 중지, 검증 실패 //assert(someInt == 0, "someInt != 0") // 동작 중지, 검증.. 더보기
사진 게시판 API 만들기 [2] Perfect 미니 프로젝트 [2] 1. 서버 객체 생성 및 라우팅 2. mongoDB 연결하기 본격적으로 API 서버 만들기에 돌입합니다!! 참고2017년 7월 현재 Swift 3 / Perfect 최신버전 2.0.x 환경에서 진행함을 알려드립니다. * Swift 최신 버전 확인(https://github.com/apple/swift/releases) * Perfect 최신 버전 확인(https://github.com/PerfectlySoft/Perfect/releases) 서버 객체 생성 및 라우팅 서버 객체와 라우팅에 대한 설명은 지난 글에서 했으므로, 작성한 코드만 설명합니다. 2017/05/24 - [Swift/Perfect] - Perfect 라우팅 우선, 프로젝트 폴더의 Sources폴더의 .. 더보기
타입캐스팅 타입캐스팅스위프트의 타입캐스팅은 인스턴스의 타입을 확인하는 용도 또는 클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인하는 용도로 사용합니다. is, as를 사용합니다. 소스코드 타입 캐스팅 예제를 위한 클래스 정의class Person { var name: String = "" func breath() { print("숨을 쉽니다") } } class Student: Person { var school: String = "" func goToSchool() { print("등교를 합니다") } } class UniversityStudent: Student { var major: String = "" func goToMT() { print("멤버쉽 트레이닝을 갑니다 신남!") .. 더보기
옵셔널 체이닝 옵셔널 체이닝 옵셔널 체이닝은 옵셔널의 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하게 활용할 수 있습니다. 매 번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인할 수 있습니다. 소스코드 예제 클래스class Person { var name: String var job: String? var home: Apartment? init(name: String) { self.name = name } } class Apartment { var buildingNumber: String var roomNumber: String var `guard`: Person? var owner: Person? init(dong: String, ho: String) { buildingNumber = .. 더보기
상속 상속스위프트의 상속은 클래스, 프로토콜 등에서 가능합니다. 열거형, 구조체는 상속이 불가능합니다. 스위프트는 다중상속을 지원하지 않습니다. 이번 파트에서는 클래스의 상속에 대해서 알아봅니다 소스코드 클래스의 상속과 재정의상속 문법class 이름: 상속받을 클래스 이름 { /* 구현부 */ } // 기반 클래스 Person class Person { var name: String = "" func selfIntroduce() { print("저는 \(name)입니다") } // final 키워드를 사용하여 재정의를 방지할 수 있습니다 final func sayHello() { print("hello") } // 타입 메서드 // 재정의 불가 타입 메서드 - static static func typeMeth.. 더보기
사진 게시판 API 만들기 [1] Perfect 미니 프로젝트 [1] 1. 프로젝트 개요 2. mongoDB 설치 3. 패키지 설치 우분투에 스위프트 설치를 시작으로 이후 두 포스팅에 걸쳐 퍼펙트에 대해 조금 알아보았습니다. 2017/04/03 - [Swift/Perfect] - 우분투(Ubuntu)에 스위프트 설치하기2017/05/17 - [Swift/Perfect] - Perfect 시작하기2017/05/24 - [Swift/Perfect] - Perfect 라우팅 이번 부터는 실질적으로 퍼펙트를 사용하여 작은 미니프로젝트를 해보려합니다.아... 물론 이런 허접한 구성은 실제 서버에서 사용하면 안되지만 간단한 예제로 감만 잡아보는 겁니다. 인증도 없고, 뭐도 없고, 보안도 안되고... 뭐... 암것도 없어요. 그러나 한 번 작은 프로.. 더보기
프로퍼티 - Property 프로퍼티프로퍼티는 클래스, 구조체, 열거형과 연관된 값입니다. 타입과 관련된 값을 저장할 수도, 연산할 수도 있습니다. 소스코드 프로퍼티의 종류인스턴스 저장 프로퍼티타입 저장 프로퍼티인스턴스 연산 프로퍼티타입 연산 프로퍼티지연 저장 프로퍼티이번 파트에서는 지연 저장 프로퍼티를 제외한 저장 프로퍼티와 연산 프로퍼티에 대해 알아봅니다. 정의와 사용프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있습니다. 다만 열거형 내부에는 연산 프로퍼티만 구현할 수 있습니다. 연산 프로퍼티는 var로만 선언할 수 있습니다.연산프로퍼티를 읽기전용으로는 구현할 수 있지만, 쓰기 전용으로는 구현할 수 없습니다. 읽기전용으로 구현하려면 get 블럭만 작성해주면 됩니다. 읽기전용은 get블럭을 생략할 수 있습니다. 읽기, 쓰.. 더보기
Swift 4 변경사항 오늘의 주제 스위프트 4 추가/변경사항 아, 벌써 스위프트가 4번째 버전이 나오네요! 참으로 빠르게 변합니다. 이제 문법적으로 변경되는 부분이 크게 많지 않아서 서 3 버전과 크게 달라진 문법은 많지 않습니다. 내부적으로 수정되거나 추가된 문법이 많고, 삭제된 부분은 거의 없습니다. 긴 말 필요없이 한 번 무엇이 바뀌었는지 살펴볼까요? 스따뚜~~~~~~~~~~~~ 단방향 범위 연산자이제 범위연산자에서 양 쪽 끝을 모두 신경쓸 필요가 없습니다, 야호! [SE-0172] var numbers = [1, 2, 3, 4, 5] // Swift 3 numbers[2.. T? { return dictionary[key] as? T } } let information = CustomModel(dictionary: [.. 더보기
클로저 - Closure 클로저클로저는 코드의 블럭입니다. 일급시민(first-citizen)으로, 전달인자, 변수, 상수 등으로 저장, 전달이 가능합니다. 함수는 클로저의 일종으로, `이름이 있는 클로저`라고 생각하면 됩니다. 소스코드 기본 클로저 문법{ (매개변수 목록) -> 반환타입 in 실행 코드 } 클로저의 사용 // sum이라는 상수에 클로저를 할당 let sum: (Int, Int) -> Int = { (a: Int, b: Int) in return a + b } let sumResult: Int = sum(1, 2) print(sumResult) // 3 함수의 전달인자로서의 클로저클로저는 주로 함수의 전달인자로 많이 사용됩니다. 함수 내부에서 원하는 코드블럭을 실행할 수 있습니다.let add: (Int, Int.. 더보기
클래스, 구조체, 열거형 비교 Class vs Struct/Enum 소스코드 열거형과 구조체는 값 타입이며, 클래스는 참조 타입이라는 것이 가장 큰 차이입니다. 또한, 클래스는 상속이 가능하지만 구조체와 열거형은 상속이 불가능합니다.struct ValueType { var property = 1 } class ReferenceType { var property = 1 } // 첫 번째 구조체 인스턴스 let firstStructInstance = ValueType() // 두 번째 구조체 인스턴스에 첫 번째 인스턴스 값 복사 var secondStructInstance = firstStructInstance // 두 번째 구조체 인스턴스 프로퍼티 값 수정 secondStructInstance.property = 2 // 두 번째 구조.. 더보기