일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 클린코드
- protocol
- 협업
- iOS프로그래밍
- OOP
- 의존성
- 개발
- fp
- 함수형프로그래밍
- 문법
- 이름
- POP
- 인터페이스
- Swfit
- SWIFT
- 클린소프트웨어
- 디자인패턴
- 부스트코스
- 함수형패러다임
- 고차함수
- IOS
- Solid
- 네이밍
- interface
- 의도
- DesignPattern
- 개발자
- CleanCode
- 아이폰프로그래밍
- 객체지향프로그래밍
- Today
- Total
목록Swift (10)
밤에 쓴 코드
출처 https://theswiftpost.co/swifty-tips/ Swifty Tips ⚡️ 25 Apr 2017 Subtle best practises that Swift developers are keeping secret. 내가 iOS 개발자를 시작할 때, 나는 대기업에서 사용되는 best practises에 대해서 항상 궁금했다. 그들의 프로젝트 구조는 어떻게 생겼을까? 그들이 사용하는 아키텍처는 뭘까? 어떤 서드파티 라이브러리가 인기 있을까? 다른이들의 경험으로 부터 해결하고, 이미 해결된 문제에 대해서 시간을 낭비하지 않고 싶은 열망이 있었다. 시작한 이후 4년이 흐르고, 나는 현재 많은 클라이언트와 함께 일을 하고 있고, coding practises에 대해서 우리팀은 많은 영리한 사람..
제네릭 제네릭은 일종의 자리맡기 타입 (place holder) 을 이용한 구현이다 배열과 딕셔너리 같이 많은 어떤 특정 조건만 준수하면 어떤 타입이든 수용할 수 있는 구조체들이 존재한다. Generic을 한국어로 표현하면 포괄적인,일반적인 이라고 표현됨을 인지하고 프로그래밍에서의 Generic을 이해해보자 일단 제네릭표현법을 코드로 작성해보겠다. 이전에 사용자정의 연산자를 인용하여 진행한다. infix operator func (lhs: inout Int, rhs: inout Int) { let temp = lhs lhs = rhs rhs = temp } 위와 같이 서로를 바꾸는 연산자를 구현했다. var a: Int = 1 var b: Int = 2 print("a: \(a) , b: \(b)") /..
사용자 정의 연산자 Swift 기본연산자 , ! , = , … 연산을 기호화하여 기호형태로 연산자 들을 지원한다. 함수도 하나의 연산이다. 함수를 연산자의 형태로 표현할 수도 있지 않을까? 사용자정의 연산자를 정의함으로써, 커스텀메소드를 부호화 할 수있다. Swift에서는 증감연산자를 기본적으로 지원하지는 않는다. 하지만 타 언어 ( Java,C++,…) 에서는 a++ , a—- 형태로 증감연산자를 지원한다. 하지만 Swift에서도 사용자가 정의하여서 사용할 수 있다. extension Int { mutating func increase() { self+=1 } mutating func decrease() { self-=1 } }위와 같이 Int 구조체를 확장하였다. var number: In..
클로저 - Closures 클로저는 자신이 선언된 컨텍스트로부터 상수나 변수 저장하고, 붙잡아 둘수 있습니다. 클로저의 형태 전역함수는 이름을가진 클로저의 형태이고 , 값을 붙잡아 둘 수 없습니다. 중첩함수는 이름을 가진 클로저의 형태이고 , 자신을 가지고 있는 함수의 값을 붙잡아 둘 수 있습니다. 클로저표현식은 이름을 가지지 않은 클로저의 형태이고 , 자신 주위 컨텍스트의 값을 붙잡아 둘 수 있습니다. Closure Expression Syntax - 클로저 표현식 { (parameters) -> return type in statements } 정수형 배열을 문자열 배열로 변환하기 함수를 이용한 정렬 var numbers = [9,3,2,4,1,5,8,7,6,0] func asendingOrder(_..
Swift) POP - Protocol Oriented Programming 상속의 한계 상속의 계층 구조가 깊어질수록 복잡도가 올라간다. 값 타입 (ex - struct)는 상속이 불가능 프로퍼티 추가 불가능 추상화된 클래스를 구체화했을 때 공통적인 책임을 가지는 여러 클래스가 존재할 수 있고, 중복된 코드를 야기한다. *중복된 상황 - 억지로 만들어낸 예시 * class Bird{ // 모든 새가 날수있는건 아니어서 동작 추가 불가능 } class Owl : Bird { func fly(){ print("훨~ 훨~") } // 비행한다 - 중복 } } class Pigeon : Bird { func fly(){ print("훨~ 훨~") } // 비행한다 - 중복 } } class Penguin : ..
Swift) Extension 익스텐션 사용하는 이유 기존 타입의 기능확장 확장된 코드 영역은 비교적 side effect 에서 자유로움 기능별로 단위를 묶어서 표현하기 쉬움 특징 *열거형, 구조체, 클래스, 프로토콜 확장 가능 * 재정의는 불가능 연산프로퍼티 추가가능 상속과는 달리 수평적 기능 추가의 느낌이 있음 사용 예시 기존의 기본클래스(구조체)의 기능적 확장 extension Int{ func changeToString ->(String){ return "\(self)" } } Default Implement - 프로토콜 기본구현 protocol runable{ func run() } extension runable{ func run(){ print("뒤뚱뒤뚱") } } TypeAlias 와 함께..
Optional 변수에 값이 존재하지 않을 수도 있다는 것을 명시한다. 다른 말로 하면 옵셔널이 아닌 변수는 무조건 값을 가져야한다. 값이 꼭 필요한 변수에는 옵셔널이 아닌 타입으로 선언함으로서 , 사전에 nil이 들어오는 걸 막을 수 있다. 또 , Optional 로 선언함으로서 , nil이 들어올 수 있으니 , 대처가 필요하다는 것을 프로그래머에게 인지 시켜줄 수 도 있다. Optional 은 제네릭 타입을 지원하는 열거형이다. enum Optional{ case .some // 값이 존재하는 경우 case .none // nil 인 경우 } Optional = Int? // 동일한 표현이다 optional 은 .some/.none 두가지경우 중 하나를 를 무조건적으로 가지는 열거형 이다. Optio..
프로토콜 위키백과 통신 프로토콜은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 **규칙 의 체계이다.** 예시 swift 프로토콜은 규칙을 표현한다는 점에서 비슷하지만 조금 다른 의미로 사용된다. 내가 좋아하는 yagom 은 명찰,공고 를 통해 이야기를 해주었다. 프로토콜은 일종의 명찰이다 . 어떤 클래스(구조체)가 특정 프로토콜을 채택하게되면 프로토콜이 요구하는 사항들을 준수해야한다. 따라서 특정프로토콜을 구현한 클래스를 통해 생성된 오브젝트는 해당 프로토콜에서 요구되는 능력들을 수행할 수 있음을 신뢰할 수 있다. struct Patient { let helper : Any } let 부엉이 = String() let 환자 = Patient(helper: 부엉이)한 환자가 있습니다. ..