Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

Stacking Fire

Swift 0. About Swift 본문

개발/Objective-C -> Swift

Swift 0. About Swift

라우비 2017. 5. 15. 16:39

Swift

명령형과 객체지향 패러다임을 기반으로 한 함수 / 프로토콜 지향 패러다임을 따르는 언어. 뭔가 말이 어렵지만, 현실을 반영하기 위해 만들어냈던 개념인 객체 지향의 경우 굳이 클래스로 객체화할 필요 없는 것들도 모두 객체화 하는 경향이 있었는데, 그건 class가 가진 기능을 가지면서 구조체 정도의 형태를 가지는 것들이 없었기 때문. 그 부분을 합리화한 것을 스위프트라고 보면 될 것 같다.

객체지향(Object-Oriented)

  • 강한 응집력(Strong Cohesion)과 약한 결합력(Weak Coupling)을 바탕으로 공존하는 객체들의 커뮤니케이션으로 프로그램을 짜는 방법.
  • Class : 강한 응집력을 바탕으로 설계되어야 하는 커스텀 데이터타입.
  • Object : Class의 인스턴스.
  • Method or Message : 행위를 수행하는 함수.
  • Struct : Class보다 단순한 내용을 캡슐화하기 위한 것. 구조체라는 이름 그대로 구조만 설정됨.
  • 명령형과의 관계 : 클래스를 통해 만들어진 객체에게 명령(Send Message)하여 메모리상에서 상태값을 변화시키기 때문에 필수적으로 명령형 패러다임과 함께 사용됨. (Objective-C는 C(명령형, 절차지향)으로부터 객체지향으로 발전시킨 것)

함수형(Functional)

  • 수학적 함수? 명령형 함수?
  • 아무튼 수학적 함수만 사용하기에 '상태 변화'가 일어나지 않는다고 한다.
  • 함수가 First-class Citizen, 일등 시민이 되었다. 무슨 말인고 하니
    • 전달인자로 전달 가능.
    • 동적 할당 가능.
    • 변수나 데이터 구조(Struct)에 담을 수 있음.
    • 반환값으로 사용 가능.
    • 할당시 고유한 객체로 구별 가능.
  • 아무튼 그래서, 막 전달해서 막 생략하고 막 못 읽게 막 만든다. 재밌는 건 가장 많이 생략한 마지막 버전은 오히려 리터럴처럼 가독성이 좋다는 것.

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
//아래 names 어레이를 역순으로 정렬하는 코드들.
let names:[String= ["wizplan""eric""yagom""jenny"]
 
//풀버전. first와 second를 가지고 어느 게 first가 클 때 true를 반환하는 클로저를 전달.
let reversedFull: [String= names.sorted(by: { (first: String, second: String-> Bool in
    return first > second
})
 
//후행 클로저로 변환. sorted 함수가 받는 인자 이름 'by'와 함께 소괄호 생략, 각 인자 타입도 생략. 자동완성 기능이 추천하는 클로저 형태 (2017년 5월).
let reversedAuto: [String= names.sorted { (first, second) -> Bool in
    return first > second
}
 
//어차피 sorted가 받는 형태도 정해져 있고, 전달할 때도 Bool 전달하니까, 반환값 명시와 구분을 위한 괄호 생략
let reversed: [String= names.sorted { first, second in
    return first > second
}
 
//어차피 의미도 없는 first와 second 생략. 그냥 $0이랑 $1으로 대체하고 그냥 리턴
let rvsd: [String= names.sorted {
    return $0 > $1
}
 
//어차피 리턴할 건데 그냥 리턴도 생략..ㅋㅋㅋㅋㅋㅋㅋㅋ..ㅋ....ㅋㅋㅋ
let rv: [String= names.sorted {
    $0 > $1
}
 
// '>' 연산자도 함수고 어차피 Bool 리턴하는 거 똑같으니까 그냥 >이것만 전달. 전달할 함수만 준비되어 있다면 자동완성으로 가능. (2017년 5월)
let r: [String= names.sorted(by: >)
cs

프로토콜 지향 (Protocol-Oriented)


'개발 > Objective-C -> Swift' 카테고리의 다른 글

Swift 5. 흐름 제어  (0) 2017.05.25
Swift 4. 연산자  (0) 2017.05.24
Swift 3. 이상한 스위프트 나라의 타입 이야기  (0) 2017.05.23
Swift 2. Data Types  (0) 2017.05.22
Swift 1. 기본적인 규칙  (0) 2017.05.18
Comments