처음부터 차근차근
Swift 문법 정리 4 본문
1급 객체(first class object)
1급 객체(first class object) == 1급 시민(first class citizen)
1급 객체란, 아래의 조건을 만족하는 객체를 말한다.
<1급 객체의 조건>
1. 변수에 저장할 수 있다.
2. 매개변수로 전달할 수 있다.
3. 리턴 값으로 사용할 수 있다.
그래서 Swift의 함수는 1급 객체이다.
함수 예시
1. 변수에 저장할 수 있다.
func convertMlToL(ml: Double) -> Double {
return ml / 1000.0
}
let toL = convertMlToL // 변수에 함수를 대입 : 1급 객체 조건 충족
print("\(convertMlToL(ml: 12))L")
print("\(toL(12))L") // 매개변수명(ml:)을 쓰지 않는다.
//결과 : 0.012L
//0.012L
변수에 함수를 대입하면 호출할 때 매개변수 명을 적지 않아도 된다.
2. 매개변수로 전달할 수 있다.
func convertMlToL(ml: Double) -> Double {
return ml / 1000.0
}
func executeFunc(funcToRun: (Double) -> Double, inputMl: Double) { // 함수를 매개변수로 사용 : 1급 객체 조건 충족
print(funcToRun(inputMl))
}
let toL = convertMlToL // 변수에 함수를 대입
executeFunc(funcToRun: toL, inputMl: 12)
//결과 : 0.012
3. 리턴 값으로 사용할 수 있다.
func convertMlToL(ml: Double) -> Double {
return ml / 1000.0
}
func convertMlToMicroliter(ml: Double) -> Double {
return ml * 1000.0
}
func chooseFunc(funcName: String) -> (Double) -> Double { // 함수를 리턴값으로 사용 : 1급 객체 조건 충족
if funcName == "toL" {
return convertMlToL
} else { // toMicroL or another
return convertMlToMicroliter
}
}
func executeFunc(funcToRun: (Double) -> Double, inputMl: Double) { // 함수를 매개변수로 사용
print(funcToRun(inputMl))
}
executeFunc(funcToRun: chooseFunc(funcName: "toL"), inputMl: 12)
executeFunc(funcToRun: chooseFunc(funcName: "toMicroL"), inputMl: 12)
//결과 : 0.012
//12000.0
클로저(Closure)
클로저(Closure)란, 익명함수다.
함수를 클로저로 구현하면 코드의 가독성이 좋아지고, 깔끔하게 정리할 수 있다.
<클로저 구현 방법>
func sub(num1: Int, num2: Int) -> Int {
return num1 - num2
}
// sub()함수 closure로 구현
let subtract = {(num1: Int, num2: Int) -> Int in
return num1 - num2
}
print(subtract(3, 1)) // 주의 : 매개변수 명 적으면 안됨!!!
func sub을 지우고 앞에 { 를 쓴다.
그리고 원래 { 가 있던 자리에는 in을 써준다.
후행 클로저(trailing closure)
후행 클로저란, 함수를 호출할 때 그 함수의 마지막 매개변수가 클로저(closure)라면 마지막 매개변수 명을 생략하고 함수 소괄호 외부에 클로저를 구현하는 것이다.
<후행 클로저 구현 방법>
func sub(num: Int) -> Int {
return num - 1
}
func executeFunc(param: Int, inputFunc: (Int) -> Int) -> Int {
return inputFunc(param)
}
// 함수 호출
// 기본
result = executeFunc(param: 10, inputFunc: sub)
// closure
result = executeFunc(param: 10, inputFunc: {(num: Int) -> Int in
return num - 1
})
// trailing closure
result = executeFunc(param: 10) {(num: Int) -> Int in
return num - 1
}
마지막 매개변수명 , inputFunc :를 지우고 )를 쓴다.
그리고 명령줄 맨 끝에 있는 )를 지워준다.
class
class란, 객체의 청사진이다.
<class 구현 방법>
class Animal {
// 프로퍼티
// 인스턴스 메서드
// 타입 메서드
}
프로퍼티 : 클래스 내의 상수, 변수
인스턴스 메서드 : 객체가 호출하는 메서드
클래스(타입) 메서드 : 클래스가 호출하는 메서드
프로퍼티(property)
프로퍼티란, 클래스 안에서 선언되는 변수나 상수이다.
- 저장 프로퍼티(Stored Properties)
- 연산(계산) 프로퍼티(Computed Properties)
이렇게 크게 2가지가 존재하는데 저장 프로퍼티에 대해서 설명하겠다.
저장 프로퍼티(Stored Properties)
저장 프로퍼티란, 가장 일반적인 프로퍼티이다.
클래스 내부에서 값을 저장할 때 사용한다.
class Animal() {
var name = "lulu" // 꼭 초기화를 해줘야 함
var age : Int? // 옵셔널로 선언하면 초기화 안해줘도 됨(자동으로 nil 초기화)
}
저장 프로퍼티는 선언할 때
1. 직접 초기화를 해주거나
2. 옵셔널 변수로 선언하거나
3. init을 통해 초기화 해야한다.
메서드(Method)
메서드란 클래스 내부에 정의된 함수이다.
- 인스턴스 메서드(instance method)
- 클래스(타입) 메서드(class method or type method)
이렇게 2가지가 존재하는데, 인스턴스 메서드에 대해 설명하겠다.
인스턴스 메서드
인스턴스 메서드란, 인스턴스(객체)가 호출하는 메서드이다.
class Animal() {
var name = "lulu"
var age : Int?
func cry() { // 인스턴스 메서드
print("aaaah")
}
}
var animal : Animal = Animal() // 아래에서 설명
animal.cry() // Animal 클래스 인스턴스가 인스턴스 메서드 호출
인스턴스
인스턴스란, 클래스 객체이다.
var 변수명 : 클래스명 = 클래스명()
이렇게 생성한다.
클래스명()은 생성자를 뜻하고,
: 클래스명 은 생략해도 된다.
예시
class Animal() {
var name = "lulu"
var age : Int?
func cry() {
print("aaaah")
}
}
var animal : Animal = Animal() // 인스턴스
animal.cry()
print(animal.name) // 인스턴스가 Animal class의 name 접근
print(animal.age) // nil
출처 : iOS프로그래밍기초(21-2학기)한성현교수 강의 내용 변형 및 요약
'프로그래밍 > Swift' 카테고리의 다른 글
Swift 문법 정리 5 (0) | 2021.10.08 |
---|---|
Swift 실습 5 (0) | 2021.10.07 |
Switf 실습 4 (0) | 2021.09.30 |
Swift 문법 정리 3 (0) | 2021.09.26 |
Swift 실습 3 (0) | 2021.09.25 |