大器晩成

함수의 활용 본문

iOS/Swift 문법

함수의 활용

zerobugpark 2024. 11. 7. 23:56

 

함수의 파라미터, 아규먼트

파라미터(인자, 매개변수) 또는 내부 매개변수: 함수 정의 시, 함수 정의에 입력값으로 사용되는 변수 (내부사용)

아규먼트(인수, 전달인자)  또는 외부 매개변수: 함수 호출 시, 함수가 필요한 파라미터의 타입과 일치하는 실제 값 (외부사용)

 

파라미터와 아규먼트의 예시

func printName(name: String) {     //name -> 파라미터
    print("안녕 냐 아룸은: \(name)")
}

printName(name:"zerogbug")  // "zerobug" (아규먼트,전달인자)
  • 함수 호출 시, 전달인자 name도 동일하게 호출해야 합니다.
  • 이때, name은 Argument Label(아규먼트 레이블)이자, 파라미터 네임(Parameter Name)이라고 할 수 있습니다.
  • Argument Label : 함수를 호출할 때 사용하는 이름
  • Parameter Name: 함수 내에서 사용할 파라미터 이름

 

아규먼트 레이블(Argument Label) / (외부 매개변수)

아규먼트 레이블이란 함수 호출 시 인자값을 구분하기 위해 사용되는 레이블입니다.

#아규먼트 레이블
func 함수이름 (<아규먼트레이블> <내부매개변수명>: <타입>,<아규먼트레이블> <내부매개변수명>: <타입>...){
 
 }

func printName2(last name: String) {
    print("안녕 내 성은 \(name)") // 함수 내부에서는 name 매개 변수 사용
}

printName2(last: "Zerobug") // 함수를 호출할 때에는 아규먼트 레이블 first를 사용
  • 아규먼트 레이블은 매개변수 이름 앞에 붙입니다..
  • 항상 매개변수 앞에 띄어쓰기 한 칸이 있어야 합니다.
  • 전달인자는 어떤 이름으로 함수애 값을 보내줄 것이지를 명시한 것입니다.
  • 매개변수는 어떤 이름으로 함수 내부에서 사용할 것인지를 명시합니다.
  • 전달 인자를 사용하면 함수 밖에서 함수 안으로 어떤 값을 가져왔는지, 이 값을 어떤 이름을 붙여 매개변수로 사용할 것인지를 명시할 수 있습니다. 이 경우 해당 값이 어떤 기능을 하는지를 살려서 매개변수 이름을 붙이게 되면 코드의 가독성이 좋아집니다.

 

아규먼트 레이블 생략 (와일드카드 패턴)

  • 아규먼트 레이블은 함수 정의부에 매개변수와 함께 사용하는 것이고, 생략이 가능합니다.
  • 또한 와일드카드 패턴(_)으로 생략도 가능합니다

아규먼트 레이블 생략

#아규먼트 레이블 생략 
func addPrintFunction(_ <매개변수명>: <매개변수 타입>, _ <매개변수명>: <매개변수 타입>)

func addPrintFunction(_ firstNum: Int, _ secondNum: Int) {
    print(firstNum + secondNum)
}

addPrintFunction(1, 2) // 전달인자 생략
  • Argumtnt Label은 생략이 가능하지만 Parameter Name은 절대 생략할 수 없다.

Argument Lable(아규먼트 레이블) & Parameter Name(파라미터 네임) 한 번에 명시

#한 번에 명시하기 (name :Type, name: Type)

func sayhello(<매개변수명>: <매개변수 타입>, <매개변수명>: <매개변수 타입>){
}

func sayhello(name: String) {
    print("Hello, \(name)") //name은 Parameter Name으로 쓰여서 함수 내부에서도 name 파라미터 사용
}

sayhello(name: "Zerobug") // 실제 호출할 때 Argument Label 또한 name으로 사용

 

가변 파라미터

 함수의 파라미터에 정해지지 않은, 여러 개의 값을 넣는 것도 가능합니다. (Variadic Parameters)

#가변인자
func 함수이름(<매개변수명>: <매개변수 타입>...){
    <실행할 내용>
}

#1
func total(_ numbers: Int...) { // 타입뒤에 ...을 붙이면 가변파라미터가 된다
    
    var total: Int = 0
    for number in numbers {
        total += number
    }
    print(total)
}

total(10,20,30)


#2
func avgAndTotal(scoreInt: Int..., scoreDouble: Double...) {
    
    var sum: Int = 0
    var avg: Double = 0.0
    
    for score in scoreInt {
        sum += score
    }
    
    for score in scoreDouble {
        avg += score
    }
    avg = avg / Double(scoreDouble.count)
    
    print("Sum: \(sum)")
    print("Avg: \(avg)")
    
}
avgAndTotal(scoreInt: 10,20,30, scoreDouble: 10.0,20.0,30.0)
// 출력: Sum: 60
// 출력: Avg: 20.0
  • 하나의 파라미터로 2개 이상의 아규먼트를 전달할 수 있습니다.
  • 아규먼트는 배열형태로 전달됩니다.
  • 가변 파라미터는 여러 개도 사용이 가능합니다.
  • 가변 파라미터는 기본값을 가질 수 없습니다.

 

함수의 파라미터에 기본값(디폴트) 

함수에서 기본값을 정하게 되면 인자의 값이 없을 경우 기본 값으로 동작 인자의 값이 있으면 인자값으로 동작합니다.

#기본값을 갖는 매개변수
func 함수 이름(<매개변수>: <매개변수 타입> = <기본값>){
    <실행할내용>
}

#1
func parameterDefault(num1: Int, num2: Int = 10) -> Int { 
    var result = num1 + num2
    return result
}
parameterDefault(num1: 10)   // Result: 20
parameterDefault(num1: 10, num2: 20) // Result: 30

#2
func echo(message: String, newline: Bool = true) {
    if newline == true {
        print(message,true)
    } else {
        print(message, false)
    }
}
echo(message: "안녕하세요")
echo(message: "안녕하세요", newline: true) // 바로 위 구문과 동작 동일
echo(message: "False", newline: false)  //명시적으로 값을 넣을 경우 기본 값이 아닌 명시된 값으로 동작

// 따라서 에코 함수는 다음과 같이 동작하는 것이다
//echo(message: String)
//echo(message: String, newline: Bool)
  • 함수의 아규먼트 값이 항상 필요한 것은 아닙니다.
728x90

'iOS > Swift 문법' 카테고리의 다른 글

함수의 표기법(시그니처 표기법)  (0) 2024.11.08
함수의 주의점  (3) 2024.11.08
함수(Function)  (0) 2024.11.07
반복문 (While문)  (5) 2024.11.06
반복문 (For문)  (0) 2024.11.05