https://youtu.be/R8OWOgCNt4M?si=bldau6gYEZ3seGj2
위 영상을 보고 정리한 글입니다. (16:23 ~ 22:01)
# 함수
함수는 특정 작업을 수행하는 코드 블록이다.
함수를 수행하기 위하여 데이터가 제공될 수 있으며, 함수를 호출한 코드에 작업한 결과를 반환할 수도 있다.
매개변수(parameter, 인자) vs 인수(argument)
함수 - 자판기
인수 : 호출 시의 값 - 내가 가진 동전
매개변수 : 정의부의 값 - 자판기 안에 넣은 내 동전
리턴값 (return value) - 자판기에서 나온 음료수
import Foundation
func fun(param: Int)
{
print(param)
}
func main()
{
let argument = 10 // Argument(인수)
fun(param: argument) // 10을 매개변수로 전달
}
main() // main 함수 호출
# 메서드 (method)
메서드는 튿정 클래스, 구조체, 열거형 내의 함수를 의미한다.
함수를 스위프트 클래스(Swift Class) 내에 선언하면 메서드라 부름
Swift 함수 선언
func <함수명> (<매개변수 이름>: <매개변수 타입>, <매개변수 이름>: <매개변수 타입>,...) -> <반환값 타입> {
// 함수 코드
}
func : 함수라는 것을 스위프트 컴파일러에게 알려주는 키워드
<함수명> : 함수에 할당되는 이름
<매개변수 이름> : 함수 코드 내에서 참조되는 매개변수의 이름
<매개변수 타입> : 함수에 전달되는 매개변수의 타입
<반환값 타입> : 함수가 반환하는 결과에 대한 데이터 타입.
* 반환하지 않으면(Void) '반환값 타입(Void)'과 '->'는 생략 가능
- 매개변수를 받지 않으며 결과를 반환하지도 않고 오직 메시지만 출력
func sayhello() { // 리턴값 없으면(-> Void) 지정하지 않아도 됨
print("Hello")
}
- 하나의 문자열과 하나의 정수를 매개변수로 받아서 문자열을 반환
func meeages(name: String, age: Int) -> String {
return("\(name) \(age)")
}
Swift 함수 정의, 호출
func sayHello() { // -> Void
print("Hello")
}
sayHello() // 함수 호출
C 언어를 Swift 함수로 변경하기
- C, C++
int add(int x, int y) {
return(x + y);
}
add(10, 20);
- Swift
func add(x: Int, y: Int) -> Int {
return(x + y)
}
add(x:10, y:20)
내부 매개변수 이름과 외부 매개변수 이름
func add(first x: int, second y: Int) -> Int {
// 외부 내부: 자료형, 외부 내부: 자료형 -> 리턴형
return(x+y)
// 함수 정의할 때는 내부 매개변수명을 사용, return(first+second) 는 오류
}
add(first:10, second:20) // add(x:10, y:20)은 오류
// 함수 호출할 때는 외부 매개변수명을 사용
- 외부 매개변수명 생략하면 내부 매개변수명이 외부 매개변수명까지 겸함
func add(x: Int, y: Int) -> Int {
return(x+y)
}
add(x:10, y:20)
Swift 함수 실습
// 1
func add(x: Int, y: Int) -> Int {
return(x+y)
}
print(add(x:10, y:20))
// 2
func add(first x: Int, second y: Int) -> Int {
return(x+y)
}
print(add(first:10, second:20))
// 3
func add(_x: Int, _y: Int) -> Int {
return(x+y)
}
print(add(10, 20))
// 4
func add(_x: Int, with y: Int) -> Int {
return(x+y)
}
print(add(10, with:20))
- 외부 매개변수명 생략하는 경우
- 내부 매개변수명이 외부 매개변수명까지 겸함 - 외부 매개변수명 : 호출할 때 사용, 내부 매개변수명 : 함수 내부에서 사용
- 외부 매개변수명을 생략하는 경우
- 다른 언어처럼 호출 가능하지만 추천하지 않음 - 첫번째 외부 매개변수명만 생략하는 경우
- Objetct-C언어의 호출 방식이 이러함
- 두번째 매개변수부터는 외부 매개변수 사용
- 제일 많이 쓰는 방법
디폴트 매개변수 정의하기
인자(argument)로 전달하는 값이 없는 경우, 디폴트 매개변수 값을 사용
함수를 선언할 때 매개변수 디폴트 값을 할당
- 이름이 인자로 전달되지 않을 경우에 디폴트로 "Kim" 이라는 문자열이 사용되도록 함
- 고객 이름 값을 전달하지 않고도 호출할 수 있는 함수가 됨
- 고객 이름을 가지고 함수를 호출하면 argument를 참조
func buildMessage(count: Int, name: String = "Kim") -> String {
return ("\(name), you are customer number \(count)")
}
var message = buildMessage(count : 100)
print(message) // Kim, you are customer number 100
var message2 = buildMessage(count : 100, name : "Lee")
print(message2) // Lee, you are customer number 100
함수로부터 여러 개의 결과 반환하기
함수는 여러 결과 값들을 튜플로 감싸서 반환할 수 있음
- 인치 단위의 수를 매개변수로 받아 야드, 센티미터, 미터로 변환하고 이 세 개의 값을 하나의 튜플에 넣어 반환
func sizeConverter(length: Float) -> (yards: Float, centimeters: Float, meters: Float) {
let yards = length * 0.0277778
let centimeters = length * 2.54
let meters = length * 0.0254
return (yards, centimeters, meters)
}
var lengthTuple = sizeConverter(length:20)
print(lengthTuple.yards)
print(lengthTuple.centimeters)
print(lengthTuple.meters)
2개의 정수를 입력받아 가감승제, 나머지 리턴
func sss(x: Int, y: Int) -> (sum: Int, sub: Int, mul: Int, div: Double, mod: Int) {
let sum = x + y
let sub = x - y
let mul = x * y
let div = Double(x) / Double(y)
let mod = x % y
return (sum, sub, mul, div, mod)
}
var result = sss(x: 15, y: 14)
print("Sum: \(result.sum)") // 합
print("Subtraction: \(result.sub)") // 차
print("Multiplication: \(result.mul)") // 곱
print("Division: \(result.div)") // 나눗셈
print("Modulus: \(result.mod)") // 나머지
- swift print format으로 구글링하여 소수점 원하는 만큼 출력
func sss(x: Int, y: Int) -> (sum: Int, sub: Int, mul: Int, div: Double, mod: Int) {
let sum = x + y
let sub = x - y
let mul = x * y
let div = Double(x) / Double(y)
let mod = x % y
return (sum, sub, mul, div, mod)
}
var result = sss(x: 15, y: 14)
// 원하는 소수점 자리수로 출력
let decimalPlaces = 2 // 소수점 자리수 설정
let formatString = "%.\(decimalPlaces)f"
print("Sum: \(result.sum)") // 합
print("Subtraction: \(result.sub)") // 차
print("Multiplication: \(result.mul)") // 곱
print("Division: \(String(format: formatString, result.div))") // 나눗셈, 소수점 자리수 지정
print("Modulus: \(result.mod)") // 나머지
가변 매개변수(variadic parameter)
함수가 지정된 데이터 타입으로 개수에 상관없이 매개변수를 받는다면 세 개의 점(...) 사용
- 임의의 개수의 String 값을 매개변수로 받아서 콘솔에 출력
Func displayStrings(strings: String...)
{
for string in strings {
print(string)
}
}
displayString(strings: "one", "two", "three", "four")
displayString(strings: "one", "two")
- 임의의 개수의 정수 값의 합을 출력하는 함수를 작성하여 호출하기
add(numbers:1,2,3) //6
add(numbers:2,2,2,2,2) //10
add(numbers1,1,1,1,1,1,1,1,1,1) //10
add numbers:1,1,1,1) //4
inout 매개변수 : call by reference 구현
Swift는 기본적으로 call by value
Swift에서 call bt reference를 구현하는 방법
함수가 값을 반환한 후에도 매개변수에 일어난 변화를 유지하려면, 함수의 선언부에서 매개변수를 입출력 매개변수(in-out parameter)로 선언해야 함
Swift 3에서는 inout의 위치가 바뀜
- Swift 2, 지금은 오류
var myValue = 10
func doubleValue (inout value: Int) -> Int {
value += value
return(value)
}
doubleValue(value:&myValue)
- Swift 3 이후
var myValue = 10
func doubleValue (value: inout Int) -> Int {
//call by reference하고 싶은 매개변수의 자료형 앞에 inout 씀)
value += value
return(value)
}
print(myValue)
print(doubleValue(value : &myValue) //출력 값? 레포트
//call by reference하고 싶은 변수에 & 붙여서 호출
print(myValue)
함수를 매개변수로 사용
Swift는 함수를 데이터 타입처럼 처리할 수 있음
다음과 같이 함수를 상수 또는 변수에 할당하는 것이 가능
func inchesToFeet (inches: Float) -> Float {
return inches * 0.0833333
}
let toFeet = inchesToFeet //함수를 자료형처럼 사용
함수를 호출하려면 원래의 함수 이름 대신에 상수 이름을 이용하여 호출 가능
var result = toFeet(10) //inchesToFeeet(10)
어떤 함수에 다른 함수를 매개변수나 반환 값으로 함수를 사용할 수 있음
- Swift 함수는 1급 객체(first class object) 또는 1급 시민(first class citizen)
매개변수로 함수를 받으려면, 함수를 받게 될 함수는 함수의 데이터 타입을 선언함
func addTwoInteger(x: Int, y: Int) -> Int {
return(x + y)
}
- 함수 타입 : (Int, Int) -> Int
- 입력 타입 : 두 개의 매개변수로 각각 Int 타입을 받음
- 출력 타입 : 반환값은 Int 타입
19:58
함수를 매개변수나 리턴값으로 사용
'iOS프로그래밍기초(Smile Han) > 문법 정리' 카테고리의 다른 글
[Swift] 문법 정리 - 상속 (3) | 2024.11.10 |
---|---|
[Swift] 문법 정리 - 클래스 (0) | 2024.11.10 |
[Swift] 문법 정리 - 연산자, 제어문 (2) | 2024.09.21 |
[Swift] 문법 정리 - optional, as, nil, Any, AnyObject (1) | 2024.09.15 |
[Swift] 문법 정리 - 데이터 타입(자료형), 상수(let), 변수(var), 튜플(Tuple) (0) | 2024.09.14 |