
Swift에는 4가지 기본 인터페이스가 있다. 가장 추상적인 인터페이스인 protocol부터 OOP에서 가장 많이 사용하는 class, 그리고 struct, enum 등이 있다. C++에서 struct와 enum은 기본 자료형을 묶어서 구조체로 만들거나 숫자 리터럴을 키워드로 변경하기 위한 용도 등으로 사용했지만 Swift는 좀 더 많은 기능을 가지고 있다. 예를 들어 struct와 enum 모두 class처럼 함수를 가질 수 있다. 이로써 struct와 class의 경계가 모호해졌다고 볼 수 있지만 여전히 두 인터페이스는 다른 사용성을 가지고 있다. 차이점 value type vs reference type struct는 value type이고 class는 reference type이다. 때문에 str..

Swift4 부터 JSON 데이터를 다룰 수 있는 Codable이라는 protocol이 추가되었다. 정확히 말하면 JSONEncoder, JSONDecoder 라는 JSON parsor가 요구하는 protocold로 JSON으로 작성된 데이터를 읽어서 저장할 수 있는 Decodable, Swift 데이터를 JSON으로 변환할 수 있는 Encodable, 그리고 이 두가지를 모두 가능하게 하는 Codable, 이렇게 세 종류가 있다. Codable은 Foundation에 정의되어 있기 때문에 사용하기 위해서는 Foundation을 import해야 된다. 숫자나 문자열을 저장하려면 Int, Float, String을 사용할 수 있고, 또 다른 codable을 사용할 수도 있다. General 일반적으로 변환..

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급 객..
- Total
- Today
- Yesterday
- ios
- Java
- 드라마
- C
- winsock
- scala
- JSP
- Cocos2d-x
- 자료구조
- game
- machine learing
- SHADER
- 운영체제
- OS
- C++
- DesignPattern
- swift
- Git
- SwiftUI
- Spring
- SOCKET
- ue4
- 데이터베이스
- 수학
- C/C++
- mongoDB
- 국내여행
- 알고리즘
- database
- rxswift
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |