본문 바로가기
iOS Swift/문법

[Swift] Functions ,Parameter, Argument Label

by 야고이 2024. 3. 15.
728x90

240314

 

함수 Funtion


장점 : 재사용성
함수를 호출한다 라고 말한다

 

print 함수

print("hello") //hello 가 파라미터

//전달할 파라미터가 없다면
print()


함수를 만드는것 : 함수를 선언한다 라고 말한다

func sayHello() {
    print("Hello")
}
//여기까지 작성한걸 실행 해보면 아무일도 안일어난다
//기능을 만들어 두기만 한 것. 함수바디에 있는걸 호출 하려면 함수를 호출해야한다
sayHello()

 


Return Values

  • 리턴타입, 리턴형(리턴하는 자료형) 이라고 불리기도 함

중요 ! ! 리턴타입을 선언했으면 반드시 같은 타입의 값을 리턴해야한다

//작성하는 형식
func add () -> Int {
    return 1 + 2 //함수 바디에 문장이 한줄이면 return 생략 할 수 있음
}

//함수호출식은 표현식이고, 함수가 리턴하는 값은 표현식의 결과가 된다
//그래서 아래의 코드를 작성 할 수 있다
if add() == 3 {
    print("three")
}

 

 

예제) 짝수면 리턴하는 함수

func printRandinEvenNumber() {
    let rnd = Int.random(in: 1...100)
    
    if !rnd.isMultiple(of: 2) { //짝수가 아니면. 그니까 홀수면 return. 암것도 안함
        return
    }
    print(rnd) //짝수면 출력!
}

printRandinEvenNumber()

강의에서 작성한 함수

 

func printRandinEvenNumber() {
    let rnd = Int.random(in: 1...100)
    
    if rnd.isMultiple(of: 2) { //짝수면 출력!
        return print(rnd)
    }
}

printRandinEvenNumber()

Q : 이렇게 해도 똑같은데 강의에선 왜 위처럼 작성했을까?

 


Parameters

  • 함수에서 입력에 해당하는 값. 입력이 없으면 파라미터를 적지 않아도 된다. 여러개 전달도 가능
  • 형식추론이 안되기 떄문에 반드시 타입을 적어줘야한다
func add () -> Int {
    return 1 + 2
}

위에서 썻던 코드를 가져와 봤다

여기선 리턴이 고정되어 있는데, 사실 문법 공부하는거 아니면 재사용도 못하기 떄문에 쓸데없는 코드다

이걸 파라미터를 활용해서 바꿔보겠다

func add(a: Int, b: Int) -> Int {
    return a + b
}

함수를 수정한 뒤 호출 하려고 보니

자동완성이 된다 !

여기서 팁! 저런 창이 안뜬다면 esc 를 눌러보자

직접 입력하는 것도 가능하지만 귀찮으니 자동완성을 애용해보자

여기서 또 팁 ! Int 부분에 네모 박스가 쳐있는데 클릭 하지 않고 tab 키를 누르면

파란색으로 활성화 된 모습을 볼 수 있다 

이상태로 숫자를 입력하고 다시 tab 을 눌러서 다음 값도 입력하면 된다

 

//파라미터 기본값 설정
func sayHello(to: String = "Stanger") {
    print("Hello, \(to)")
}

sayHello(to: "Swift") //Hello, Swift
sayHello() //Hello, Stanger 파라미터를 생략하면 기본 값이 출력된다

 

추가로 파라미터에 대해서 !

1) 파라미터는 함수 바디에서 사용하는 임시상수이다. 고로 값을 못바꿈

 

 

2) 파라미터의 스코프는 함수바디로 제한 된다. 함수 밖에서는 접근 할 수 없다


3)파라미터는 함수의 실행 할 때 자동으로 생기고 실행이 끝나면 자동으로 사라진다.

스코프 안에서만 사용할 수 있다는 것도 이 때문이다. 

 

4) 파라미터 이름

함수에서 선언된건 formal Parameter

함수를 호출 할 때의 파라미터는 Actual Parameter, Argument(인자) 라고 한다

func add(a: Int, b: Int) -> Int { //여기서 선언된 파라미터는 formal Parameter
    return a + b
}

add(a: 12, b: 34) //실제로 값을 넣는 것  Actual Parameter, Argument(인자)

Arument Label

 

1. 이름

func sayHello(name: String) { //함수식에 있는 name은 파라미터 이름
    print("Hello, \(name)")
}

sayHello(name: "Swift") //호출식에 있는 name은 Argument Label

 

2. 함수명이 같아도 에러가 안나는 이유 : 함수식에 Arument Label이 있기 때문에 두개의 함수가 구분 된다

 

func sayHello(name: String) { //함수식에 있는 name은 파라미터 이름
    print("Hello, \(name)")
}

func sayHello(to name: String) { //함수식에 Arument Label "to" 가 있기 때문에 위에 함수랑 구분 된다
    print("Hello, \(name)")
}

 

3. argument label 은 함수를 호출 할 때 사용하는 네임이고, 함수바디에서 파라미터에 접근 할 때 사용하는건 아니다

 

4. Argument Label 생략. wildcard Pattern으로 생략

//기존함수
func sayHello(to name: String) { 
    print("Hello, \(name)")
}
sayHello(to: "Swift")
//wildcard pattern 사용
func sayHello(_ name: String) { 
    print("Hello, \(name)")
}

sayHello("Swift") // to: 가 생략 됨

728x90

댓글