본문 바로가기

프로그래밍

기본문법을 마치며... 더 알아보기이제까지 포스팅한 내용 외에 추가적으로 알아가야 할 문법과 개념들을 모아봤습니다.제네릭(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.. 더보기
익스텐션 익스텐션익스텐션(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") // 동작 중지, 검증.. 더보기
타입캐스팅 타입캐스팅스위프트의 타입캐스팅은 인스턴스의 타입을 확인하는 용도 또는 클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인하는 용도로 사용합니다. 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 = .. 더보기
인스턴스의 생성과 소멸 인스턴스의 생성과 소멸인스턴스를 생성하는 이니셜라이저와 클래스의 인스턴스가 소멸될 때 호출되는 디이니셜라이저 그리고 그와 관련된 것들에 대해 알아봅니다.프로퍼티 초기값이니셜라이저 init디이니셜라이저 deinit 소스코드 프로퍼티 기본값스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 합니다. 프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 됩니다.class PersonA { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "nick" } // 인스턴스 생성 let jason: PersonA = PersonA() // 기본값.. 더보기
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.. 더보기
열거형 - Enumerations 열거형 소스코드 정의 문법스위프트의 열거형은 다른 언어의 열거형과는 많이 다릅니다. 잘 살펴보아야 할 스위프트의 기능 중 하나입니다.enum은 타입이므로 대문자 카멜케이스를 사용하여 이름을 정의합니다각 case는 소문자 카멜케이스로 정의합니다각 case는 그 자체가 고유의 값입니다각 케이스는 한 줄에 개별로도, 한 줄에 여러개도 정의할 수 있습니다 enum 이름 { case 이름1 case 이름2 case 이름3, 이름4, 이름5 // ... } 열거형 사용enum Weekday { case mon case tue case wed case thu, fri, sat, sun } // 열거형 타입과 케이스를 모두 사용하여도 됩니다 var day: Weekday = Weekday.mon // 타입이 명확하다면.. 더보기
클래스 클래스 소스코드 정의 문법클래스는 참조 타입입니다. 타입이름은 대문자 카멜케이스를 사용하여 정의합니다.class 이름 { /* 구현부 */ } 프로퍼티 및 메서드 구현클래스의 타입 메서드는 두 종류가 있습니다. 상속 후 재정의가 가능한 class 타입메서드, 상속 후 재정의가 불가능한 static 타입메서드가 있습니다. 자세한 내용은 상속 부분에서 다시 다룹니다.class Sample { // 가변 프로퍼티 var mutableProperty: Int = 100 // 불변 프로퍼티 let immutableProperty: Int = 100 // 타입 프로퍼티 static var typeProperty: Int = 100 // 인스턴스 메서드 func instanceMethod() { print("inst.. 더보기
스위프트 프로그래밍 집필도서 출간 안내 안녕하세요 야곰입니다 :) 벌써 책이 나온지는 꽤 되었고 부끄럽지만 제가 쓴 책을 소개합니다. 스위프트 프로그래밍이라는 책이구요, 한빛미디어에서 나왔습니다. [링크] 스위프트 프로그래밍 언어 문법서이며, 여러가지 팁과 노트가 수록되어 있습니다. 스위프트를 활용한 프로그래밍 기법이라던지 최근 이야기되고 있는 프로그래밍 패러다임에 대한 이야기들도 있습니다. 많은 참고가 되면 좋겠습니다. 링크[한빛미디어][교보문고][YES24][알라딘][인터파크][반디앤루니스][영풍문고][다음 책][네이버 책] by yagom facebook : http://fb.yagom.netfacebook group : https://www.facebook.com/groups/yagom/ p.s 제 포스팅을 RSS .. 더보기
파헤치기 #5. iOS App Programming Guide (5) App States and Multitasking <1> 이 문서는 2013s 01. 기준으로 작성된 글이므로, 이후에 애플 문서의 내용이 변경될 수 있습니다. 또한 전문 번역가가 아니기 때문에 의역, 오역의 소지가 다분히 많습니다. 참고하시기 바랍니다. 공개 수배 합니다! 유용한 iOS 개발문서를 함께 번역해 나갈 분들을 찾습니다. 현재도 함께 작업중이신 분들 모두 전문 번역가 아닙니다. 모두 열정과 열의로 함께 작업하고 계십니다. 자신의 재능을 자신뿐만 아니라 또 다른 누군가를 위해서 사용한다면 더더욱 빛이 날 것입니다. 함께하길 원하는 분께서는 덧글 또는 이메일 주시기 바랍니다 :) 오늘의 주제 1. Manage App State Changes 파헤치기 다섯 번째 시간입니다.^^ 이번 파트는 Scott Lim 님께서 도와주셨습니다. 번역에 도움주셔서 진심.. 더보기
C <20>. enum 오늘의 주제 1. enum 벌써 스무 번째 시간입니다.^^ 지난 번에 연결리스트에 대해 알아보았는데요 ㅎ 어려우셨죠? 요번에는 잠시 쉬어갈 겸 간단한 녀석 하나 들고 왔습니다~ 이런 녀석도 있구나~ 알고 가시면 될 듯 합니다. 자 그럼 상쾌한 기분으로 출발 해 볼까요? 고고씽~~~~~~~~~~~~ # enum 지난 번에 전처리자를 이야기 하면서 enum에 대하여 스치듯이 이야기 해 드린 것 같은데요 그때 소개해 드리지 못해 이번에 소개해 드리려 합니다. enum은 상수 세트를 선언 해 줄 수 있습니다. 주로 어떤 상수 Flag를 지정해 줄 때 사용하게 되는데요, 그게 무슨 뜻이냐 하면 내가 프로그램 안에서의 약속을 상태1 == 0 상태2 == 1 상태3 == 2 으로 표현 간단히 해 주고 싶을 때 사용하.. 더보기
C <18>. 연결리스트 (Linked list) - 자료구조(1) 오늘의 주제 1. 연결 리스트 (Linked list) 열 여덟 번째 시간입니다.^^ 지난 번에 동적 할당에 대하여 알아보았습니다~ 오늘은 동적 할당과 구조체를 알고 계셔야 이해할 수 있습니다.ㅎ 2012/05/16 - [C] - C . 구조체 2012/05/18 - [C] - C . 동적할당 자. 오늘 내용은 난이도가 쪼깨 있습니다~ 처음 보시는 분들은 다섯 번은 봐야 이해가 될랑 말랑 하실거예요..ㅎㅎ 물론 C의 문법은 아닙니다만(사실 C의 중요한 문법은 거의 끝났다고 봐야겠죠?), 자료구조 공부하심에 있어서 도움이 되실거예요~ 정말 중요한 것이니 몇 번을 보고, 다른 싸이트를 검색하고, 직접 계속 둘러보면서 꼭 몸으로 익히도록 하세요~! 자 험난한 여정을 함께 즐겨 볼까요?ㅎ 스따뚜~~~~~~~~~.. 더보기
C <17>. 동적할당 오늘의 주제 1. 동적할당 malloc 열 일곱 번째 시간입니다.^^ 지난 번에는 구조체에 대하여 알아보았습니다. 구조체라는 녀석도 꽤나 매력적인 녀석입니다. 예를 들어 한 사람의 정보를 구조체 하나에 담을 수도 있구요(이름, 나이, 성별, 직업 등등)... 복합적인 자료를 관리하기 참 편리할 것 같죠?ㅎ 그리고 저번에 배웠던 배력적인 배열에 대해서도 잠깐 생각해 보도록 해요. 2012/05/11 - [C] - C . 배열 ㅂㅐ열에서 우리는 하나의 의문을 가지고 끝을 맺었었죠. 배열의 크기는 조절 할 수 없는가 였는데요. 네, 조절할 수 없으므로, 필요에 따라서 우리가 원하는 크기만큼 할당하는 것이 좋겠죠? 그런데 우리가 개발을 하면서 이 배열은 딱 이 사이즈면 돼. 라고 말할 수 있는 경우는 많지 않습.. 더보기
C <16>. 구조체 오늘의 주제 1. 구조체 열 여섯 번째 시간입니다.^^ 지난 번에는 전처리자에 대해 알아보았습니다. 잘만 사용하면 좋지만, 잘못 사용한다면 독이 될 수 있는 녀석입니다. 사용에 유의하세요^^ 오늘은 또 하나의 개념 구조체에 대해 알아보도록 하겠습니다. 자 그럼 이제 시작해 볼까요?^^ 스따뚜~~~~~~~~~~~~ 그 전에 추천 한 방 부탁~~~~~~~해요~~~~~~ 저에게 큰 힘이 됩니다. ^~^ # 구조체의 개념 간단 합니다. 이 녀석은 배열과는 다르게 서로 다른 종류의 자료들이 들어갈 수 있습니다. 큰~~~~~~~ 박스 안에 서로 다른 크기의 작은 박스들이 들어가 있는 형태라고 보시면 되겠습니다. 그래서 우리가 큰 박스를 만들고 그 안에 작은 박스들을 만들어 넣습니다. 선언하는 방법은 struct 구.. 더보기
C <14>. 배열 오늘의 주제 1. 배열 열 네번째 시간입니다.^^ 지난 번에는 변수의 범위에 대하여 알아보았습니다. 감이 조금 오실지는 잘 모르겠습니다^^; 혹여나 부족한 부분이 있다면 말씀해 주세요 ㅎ 이번에는 또 하나 중요한 개념인 배열에 대하여 알아보도록 하겠습니다. 출발!!!! 자, 시작전에 추천 한 방 어떠세요?ㅎ # 배열이란? 자, 배열이란 무엇일까요? 配列 나눌 배, 벌일 열. 사전에는 "동일한 성격의 데이터를 관리하기 쉽도록 하나로 묶는 일." 이라고 정의되어 있네요 ㅎ 자, 쉽게 한 번 알아봅시다. 위에는 제가 발로그린 배열의 개념도 입니다. 위의 정의에서 보듯이 배열은 같은 종류의 데이터를 줄세워 놓은 녀석을 말합니다. 그림에서 보듯이 배열은 같은 크기의 상자들이 쭈욱 붙어서 늘어서 있습니다. 배열의 .. 더보기
C <7>. 조건문(2) switch 오늘의 주제 1. switch문 사용해 보기 일곱 번째 시간입니다.^^ 지난 번에는 if 조건문에 대해 알아보았습니다. 이번에는 또다른 조건문인 switch문에 대해 알아보도록 할게요 ㅎ 스따뚜~~~~~~~~~~~~ # switch 자, 일단 만들어 봅시다. 지난번 if문 할 때 만들어 놓았던 프로젝트를 열어 봅시다. 이번에는 switchNumbers() 라는 함수를 만들거예요. 빨간네모를 따라 코드를 작성해 봅시다.ㅎㅎ 위의 코드의 실행 결과 화면입니다. switch문의 작성법은 이렇습니다. switch(대상 변수) { case 정수 혹은 문자 : 실행할 명령문 break; case 정수 혹은 문자 : 실행할 명령문 break; case 정수 혹은 문자 : 실행할 명령문 break; default : .. 더보기