[Swift] 함수, 메서드

Boogios·2023년 5월 31일
0
post-thumbnail

함수가 받는 모든 매개변수는 상수 let가 기본값임
함수 선언할 때, 매개변수를 변수 var로 바꿔줄 수 있음 -> shadow copy 라고 함

    func getName(name: String, age: Int) -> String {
    	var name = "KK" // 변수로 변경해주지 않으면 아래 코드에서 에러 발생
        name = "KeeN"
        
		return "\(name) is \(age) years old"
	}

지역 매개변수(local parameter name) vs 외부 매개변수(external parameter name)

    func getNameAndAge(name: String, age: Int) -> String {
		return "\(name) is \(age) years old"
	}

위에서 함수를 선언할 때 name, age 파라미터를 지역 매개변수라고 하고,
기본적으로 함수 매개변수에는 동일한 지역 매개변수명과 외부 매개변수명이 할당됨

	getNameAndAge(name: "KeeN", age: 25)

함수를 호출할 때 쓰이는 외부 매개변수명이 자동으로 할당되지만 아래와 같이 함수를 선언하면 생략 가능함

	func getNameAndAge(_ name: String, age: Int) -> String {
		return "\(name) is \(age) years old"
	}

_ name 으로 선언하면 외부 매개변수명을 생략하여 사용할 수 있음

	getNameAndAge("KeeN", age: 25)

외부 매개변수명을 함수 선언부에서 선언도 가능함

	func getNameAndAge(userName name: String, userAge age: Int) -> String {
		return "\(name) is \(age) years old"
	}

이렇게 선언했다면 아래와 같이 호출해야함

	getNameAndAge(userName: "KeeN", userAge: 25)

디폴트 매개변수

    func getNameAndAge(_ name: String = "KeeN", age: Int) -> String {
		return "\(name) is \(age) years old"
	}

디폴트 매개변수 값을 지정해주면 아래와 같이 name을 생략하여 호출할 수 있음

	getNameAndAge(age: 25)
    getNameAndAge("KeeNNN", age: 30) // 다른 이름으로 변경도 가능

가변개수 매개변수

    func displayNumbers(_ strings: String...) {
		for string in strings {
        	print(string)
        }
	}
    
    displayNumbers("one", "two", "three", "four")

함수가 몇개의 매개변수를 받을지 모르는 경우 ...을 사용하여 선언할 수 있음


입출력 매개변수(in-out parameter)

    func plusOne(_ number: Int) -> Int {
		var number = number // shadow copy
        number += 1
        return number
	}
    
    var myNumber: Int = 10
    let result: Int = plusOne(myNumber)
    
    print(myNumber) // 10 출력
    print(result) // 11 출력
    print(myNumber) // 그대로 10 출력

원본 변수의 값을 변경하기 위해서는 함수를 선언할 때 입출력 매개변수로 선언해줘야 함

    func plusOne(_ number: inout Int) -> Int { // inout -> 입출력 매개변수
		// var number = number -> shadow copy는 필요 없음
        number += 1
        return number
	}
    
    var myNumber: Int = 10
    
    print(myNumber) // 10 출력
    print(plusOne(&myNumber) // 11 출력, & 붙여줘야 원본 값 변경 가능
    print(myNumber) // 변경된 값 11 출력

매개변수인 함수

함수가 데이터 타입처럼 취급될 수 있음
함수를 상수나 변수에 할당하는 것도 가능함

	func plusOne(_ number: Int) -> Int {
    	return number + 1
    }
    
    let plus1 = plusOne // 함수를 상수에 할당
   
    let result = plus1(10) // 상수 이름을 이용하여 함수 호출 가능
    print(result) // 11 출력

함수를 매개변수로 받는 또 다른 함수 선언 예시

    func getName(_ name: String) -> String {
    	return name
    }
    
    let name = getName
    
    func outputPrint(_ exampleFunction: (Float) -> Float, value: Float) {
    	let result = exampleFunction(value)
        print(result)
    }
    
    outputPrint(name, value: 10)
profile
iOS Developer

0개의 댓글