SwiftUI가 나왔지만 아직 많은 개발자들이 UIKit을 사용해서 개발하고 있기 때문에 UIKit도 공부할 필요가 있다. 프로필을 보여주는 메인 ViewController를 만들어 보자. XCode12부터 SwiftUI를 사용해서 개발할 수 있게 되었기 때문에 프로젝트를 만들 때 두가지를 선택할 수 있다. 여기에서는 Storyboard를 활용해서 만들 것이기 때문에 storyboard를 선택하고 넘어간다. 언어는 swift를 선택한다. 프로젝트를 만들면 AppDelegate, SceneDelegate, main storyboard가 자동으로 생성되어 있는 것을 볼 수 있다. AppDelegate : 애플리케이션의 생명 주기에 따라 발생하는 이벤트를 처리한다. SceneDelegate : IOS13부터 ..
swift의 함수형 언어 특성인 closure를 공부했으니 이번에는 객체지향적 특성에 대해 공부해보자. swift는 객체지향 코딩을 위해서 여러가지 인터페이스를 제공한다. 사실 인터페이스라는 단어와 가장 어울리는 개념은 protocol이다.하지만 프로그래머로 하여금 코드의 각 조각들을 서로 연결시켜주는 역할을 한다는 뜻으로 사용했다. protocol : 가장 추상적인 인터페이스로 선언만 허용되는 인터페이스다. 실제 사용하기 위해서는 상속을 받아서 구체화시켜서 사용한다. class : 아마 가장 많이 사용할 인터페이스일 것이다. 함수(=method)와 변수(=property)를 모두 가질 수 있고, 인스턴스를 생성해서 프로그램 여기저기에서 사용된다. struct : 데이터를 구조화시킬 때 많이 사용한다. ..
객체지향 프로그래밍을 하다보면 상속 관계에 있는 여러 클래스의 인스턴스를 만들고 그 인스턴스들을 관리하는 방법이 필요하다. type별로 일일히 관리하면 코드가 너무 비효율적이니까 효율적으로 관리하기 위해서는 일단 해당 인스턴스의 정확한 type을 알아야하고, 가능한 가장 추상적인 type으로 관리할 수 있어야 한다. 보통 super class type으로 모든 인스턴스를 관리하고 특정 sub class의 연산을 수행하려면 sub class type으로 캐스팅해서 접근하도록 구현하는데 swift 에서 이걸 어떻게 구현할 수 있는지 알아보자. is is라니. swift는 가독성을 향상시키기 위해서 노력한 흔적들이 굉장히 많이 보인다. 그래서 문법을 말로 설명하는 것 보다 코드를 한번 보는 게 오히려 더 이해..
함수를 많이 만들고 함수의 기능이 점점 많아지고 연결된 다른 연산들이 많을 경우 함수로 진입하기 위한 조건과 종료할 때 처리해 줘야 할 일들이 점점 더 많이 생긴다. 그래서 이 두가지를 함수의 시작과 끝에서 처리해 주어야 하는데 swift는 이 동작을 위한 문법도 제공한다. guard if문과 거의 동일한 문법, 동일한 내용이다. 단, 함수 시작 부분에 함수 진입조건을 검사할 때 guard를 사용하면 다른 사람으로 하여금 코드를 다시 읽었을 때 함수의 진입조건이 무엇이고, 어디서부터 함수의 진짜 내용인지 쉽게 알 수 있게 한다. 함수의 시작이라고 했지만 실제 동작은 함수 맨 위에서부터 순서대로 실행하다가 guard를 실행한다. if의 경우 let으로 optional binding을 하면 if 밖에서는 바..
함수형 언어는 함수를 1급 객체로 다루기 때문에 함수 자체가 여기저기에 사용될 수 있다. 변수를 파라미터로 전달할 때 변수 이름으로 넘겨주지 않고, 값을 직접 넘겨줄 수 있듯이 함수도 따로 이름에 담지 않고 연산 내용을 직접 전달할 수 있다. closure는 함수보다 좀 더 추상화된 개념이며, 함수는 이름이 있는 전역 closure라고 할 수 있다. (근데 왜 책은 closure보다 함수를 먼저 알려주는지 모르겠다.) 따라서 아래 두 표현은 같은 내용이라고 할 수 있다. // function func foo(count: Int) -> String { return “there are \(count) flowers over there.” } // closure let foo = { (count: Int) -..
swift는 함수도 1급 객체이기 때문에 변수 이름에 저장하거나 다른 함수의 파라미터로 전달할 수 있다. 객체지향 언어만 공부했으면 처음에는 이해하기가 힘들 수도 있지만 c++에도 최근에 추가되고 있는 함수 포인터와 같은 맥락이라고 이해하면 되겠다. 함수 타입 함수도 변수에 저장할 수 있다고 했다. 변수는 자료형을 가져야 되는데 그럼 함수를 변수에 담았을 때 그 변수는 어떤 자료형을 가질까? 함수의 원형을 생각해보면 쉽게 이해할 수 있다. 함수를 좀 더 추상적으로 생각해보자. func add(a: Int, b: Int) -> Int { return a + b } 위 add함수를 보자. 함수 내용은 추상화할 수 없으니까 버리고, 파라미터와 반환값만 추상화 해보자. Int 자료형 변수를 2개 받아서 Int ..
swift는 객체지향, 함수지향 패러다임을 고루 채용하고 있기 때문에 객체지향적으로 프로그래밍을 할 수도 있고, 함수지향적으로도 프로그래밍을 할 수도 있게 강력한 함수 문법을 제공한다.기본적으로 swift의 함수는 1급 객체로 분류된다. 1급 객체(first class object) 또는 1급 시민(first class citizen) 다음 조건을 충족하는 객체를 1급 객체라고 한다. 1. 변수에 담을 수 있다. 2. parameter로 전달할 수 있다. 3. return type으로 사용할 수 있다. 일반적인 객체지향 언어는 숫자, 문자열 등이 이에 속하지만 함수형 언어에서는 함수 또한 같은 방식으로 다룰 수 있다. 함수는 특정한 연산을 수행하는 코드블록을 말하며, swift 에서는 함수 또한 1급 객..
프로그램의 흐름을 좌우하는 문법으로, 조건문과 쌍벽을 이루는 반복문에 대해 알아보자. 대다수 프로그램들이 반복적인 일을 수행하는 용도로 만들어지기 때문에 굉장히 중요한 문법이다. 사실 문법 자체는 쉽지만 이것을 어떻게 잘 활용하는 것이 코딩 능력의 척도가 되므로 창의력을 잘 사용해 보자. for for문의 경우 c-style 문법과 많이 다르다. c-style for문이 swift 2.x 까지는 있었다고 하는데 그마저도 3.0으로 업데이트 되면서 사라졌다고 한다. 또한 c-style 에는 없는 비교 연산자가 추가되었다. 처음에는 어색했는데 여러번 보니까 더 직관적인 것 같기도 하고 무엇보다 코드가 짧아진다는 장점이 있다. for index in 1...5 { print(index) } // 1 // 2 ..
- Total
- Today
- Yesterday
- database
- 운영체제
- SwiftUI
- 자료구조
- Git
- mongoDB
- OS
- winsock
- 데이터베이스
- swift
- DesignPattern
- Java
- machine learing
- C/C++
- scala
- rxswift
- 수학
- SHADER
- game
- Cocos2d-x
- ue4
- C++
- 드라마
- 알고리즘
- JSP
- 국내여행
- C
- ios
- SOCKET
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |