▶ 함수
-함수(function)는 일련의 작업을 수행하는 코드 블록이다.
-입력 값을 받아들이고, 해당 값을 기반으로 작업을 수행하고, 결과를 반환할 수 있다.
-함수는 재사용 가능하며, 여러 번 호출될 수 있다.
-일반적으로 이름, 매개변수(parameter), 반환 타입(return type) 등의 특징을 가지고 있다.
▶ 메서드
-메서드는 객체(object)나 클래스(class)에 속한 함수로, 특정 객체의 동작을 정의한다.
-객체 내부의 상태(state)에 접근하여 변경할 수 있는 기능도 제공한다.
-메서드는 객체 지향 프로그래밍에서 주로 사용되며, 해당 클래스나 구조체(structure) 등에 종속된다.
▶ if let vs guard let
-if let
이 임시 상수는 if 문의 내부 스코프(블록)에서만 사용할 수 있다.
만약 옵셔널 값이 nil이면, if let 블록은 실행되지 않는다.
let optionalValue: Int? = 5
if let value = optionalValue {
print(value) // 이곳에서만 'value'를 사용할 수 있다.
}
-guard let
이 임시 상수는 해당 코드 블록의 나머지 부분에서 사용할 수 있다.
만약 옵셔널 값이 nil이면, 바로 return하거나 break 등을 통해 현재 스코프를 종료한다. 따라서, 'else' 절을 반드시 포함해야 한다.
func printIfNotNil(optionalValue: Int?) {
guard let value = optionalValue else { return }
print(value) // 이곳에서 'value'를 사용할 수 있다.
}
▶ swtich~case 구문을 활용한 BMI에 따른 결과를 알려주는 코드 예제
func classifyBMI(weight: Double, height: Double) -> String {
let bmi = weight / (height * height)
switch bmi {
case ..<18.5:
return "저체중"
case 18.5..<25:
return "정상"
case 25..<30:
return "과체중"
case 30..<35:
return "비만 (1단계)"
case 35..<40:
return "비만 (2단계)"
default:
return "비만 (3단계)"
}
}
// 사용 예시
let result = classifyBMI(weight:70, height:1.75) // 키는 미터 단위로 입력해야 한다.
print(result)
▶ 1급 객체와 1급 시민
1급 객체(first-class object) 또는 1급 시민(first-class citizen)이란, 다른 객체들과 동일한 조건과 권한을 가진 객체를 의미한다. 이는 어떤 프로그래밍 언어에서도 공통적으로 사용되는 개념이다.
1급 객체가 되기 위해서는 일반적으로 다음 세 가지 조건을 만족해야 한다.
-변수나 데이터 구조 안에 담을 수 있다: 1급 객체는 변수에 할당될 수 있어야 하며, 배열이나 딕셔너리와 같은 데이터 구조 안에 저장될 수 있어야 한다.
-파라미터로 전달할 수 있다: 함수나 메서드의 매개변수로 1급 객체를 전달할 수 있어야 한다.
-반환 값으로 사용할 수 있다: 함수나 메서드의 반환 값으로 1급 객체를 사용할 수 있어야 한다.
// Swift에서의 함수가 1급 시민임을 보여주는 코드
// 함수 정의
func add(a: Int, b: Int) -> Int {
return a + b
}
// 변수에 할당
let sumFunction = add
// 파라미터로 전달하고 반환 값으로 사용
func operateOnNumbers(a: Int, b: Int, operation: (Int, Int) -> Int) -> Int {
return operation(a,b)
}
let result = operateOnNumbers(a: 4, b: 2, operation: sumFunction)
▶클로저
클로저 표현식(Closure Expressions)은 이름 없는 함수를 제공하는 경량 문법이다. 클로저는 작업을 캡슐화하거나 후에 실행할 코드 블록을 만드는 데 사용된다. 이들은 다른 함수의 인자로 전달되거나, 변수에 저장되어 나중에 실행할 수 있다.
예를 들어, 정수 배열을 정렬하는 간단한 클로저 표현식은 다음과 같다.
let numbers = [1, 5, 3, 6, 2, 7]
let sortedNumbers = numbers.sorted(by: { (s1: Int, s2: Int) -> Bool in return s1 < s2 })
Swift에서 클로저는 많은 유용한 기능을 제공한다. 가장 중요한 것 중 하나는 그들이 주변 컨텍스트에서 값을 "캡처"할 수 있다는 것이다. 즉, 클로저가 선언된 범위의 변수와 상수에 접근하고 그 값을 유지할 수 있다.
또한 Swift의 클로저 표현식은 강력한 타입 추론 및 타입 별칭 기능을 지원하여 간결하고 명확하게 작성될 수 있다. 예를 들어 위의 예제에서 sorted(by:) 메서드가 Bool 값을 반환하는 함수를 요구하기 때문에 Swift는 (Int, Int) -> Bool 타입의 함수임을 알 수 있으므로 파라미터와 반환 타입 선언을 생략할 수 있다.
let sortedNumbers = numbers.sorted(by: { s1, s2 in return s1 < s2 })
더욱이 단일 표현식 클로저에서는 return도 생략 가능하다.
let sortedNumbers = numbers.sorted(by: { s1, s2 in s1 < s2 })
'프로그래밍 > iOS' 카테고리의 다른 글
[iOS] Swift 공부 - 6 (0) | 2023.10.16 |
---|---|
[iOS] Swift 공부 - 5 (1) | 2023.10.16 |
[iOS] Swift 공부 - 3 (0) | 2023.09.25 |
[iOS] Swift 공부 - 2 (0) | 2023.09.25 |
[iOS] Swift 공부 - 1 (0) | 2023.09.18 |