大器晩成

함수의 주의점 본문

iOS/Swift 문법

함수의 주의점

zerobugpark 2024. 11. 8. 00:10

 

 함수의 파라미터

func someSquare(num: Int) -> Int {
    num = num * num // let num: Int, num은 상수이다. 즉 값의 변경이 불가능하다.
    return num2
}
someSquare(num: 10)
  • 파라미터의 값은 상수입니다. 즉 변경이 불가능합니다.

 

함수 내부의 Scope (변수의 생존 범위와 생명 주기)

func someSquare(num: Int) -> Int {
    num = num * num // num은 상수이다. 즉 값의 변경이 불가능하다.
    return num2
}
  • 변수의 생존 범위는 스코프 { }입니다.
  • 상수 num은 함수의 스코프"{    }"안에서만 사용이 가능하며, 벗어날 경우 사용할 수가 없습니다.
  • 변수를 구분해 보면 전역변수와 지역변수로 나눌 수 있으며, 전역변수는 글로벌 변수라고 합니다.
  • 지역변수는 선언된 블록이 실행되면서 생겨났다가 실행 블록이 끝나면 제거됩니다. 이를 변수의 생명주기하고 합니다.
  • 지역 변수는 블록 내에서만 사용이 가능하며 전역변수는 하위블록에서도 사용이 가능합니다.
  • 함수처럼 블록 내부에서 변수나 상수가 사용되는 경우 컴파일러는 다음과 같은 순서로 위치를 찾습니다.
    1. 함수 내부에서 정의된 변수를 찾음
    2. 함수 외부에서 정의된 변수를 찾음
    3. 글로벌 범위에서 정의된 변수를 찾음
    4. import 된 라이브러리 범위

return 키워드의 정의

  • 리턴타입이 있는 함수의 경우(아웃풋이 있는 경우):
    리턴 키워드 다음의 표현식을 평가한 다음에 그 결과를 리턴하면서 함수를 벗어납니다.
  • 리턴타입이 없는 함수의 경우(아웃풋이 없는 경우):
    함수의 실행을 중지하고 함수를 벗어납니다.
#1 리턴 타입이 있는 경우
func subFunction(num1: Int, num2: Int) -> Int {
    var result = num1 - num2
    return result
}
subFunction(num1: 3, num2: 4) //출력: -1

#2 리턴 타입이 있는 경우
func checkNumFunction(num: Int) -> Int {
    
    if num >= 5 {
        return num
    }

    return 0
}
checkNumFunction(num: 3) // 0
checkNumFunction(num: 5) // 5

#3 리턴 타입이 있는 경우
func numberPrint(n num: Int) {
    
    if num >= 5 {
        print("숫자가 5이상입니다.")
        return
    }
    
    print("숫자가 5미만입니다.")
}
numberPrint(n: 7) // 출력: print("숫자가 5이상입니다.")
numberPrint(n: 4) // 출력: print("숫자가 5미만입니다.")
numberPrint(n: 5) // 출력: print("숫자가 5이상입니다.")

#4 리턴 타입이 없는 경우
func numberPrint(n num: Int) {
    
    if num >= 5 {
        print("숫자가 5이상입니다.")
    }
    
    print("숫자가 5미만입니다.")
}
numberPrint(n: 7) // 출력: print("숫자가 5이상입니다.")
		  // 출력: print("숫자가 5이상입니다.")
numberPrint(n: 4) // 출력: print("숫자가 5미만입니다.")

 

리턴타입이 있는 경우, 함수의 실행문의 의미

 - 리턴 타입이 있는 함수를 호출하는 경우, 함수를 호출하는 것은 표현식입니다. (표현식의 결과는 함수가 리턴하는 값)

func ageInt() -> Int {
    return 30
}

var yourAge: Int = ageInt()           // 30

if ageInt() == 30 {
    print("나이가 일치합니다.")
}

 

함수의 중첩된 사용

  • 함수 안에 함수를 작성할 수도 있습니다.
    (함수 안에 있는 함수는 밖에서 사용이 불가능합니다.)
  • 함수를 제한적으로 사용하고 싶을 때 사용합니다.
func moterSpeedCtroller(status: Bool, value: Int) -> Int {
    func accelerate(input: Int) -> Int {
        return input + 1
    }
    
    func deceleration(input: Int) -> Int {
        return input - 1
    }
    
    if status {
        return accelerate(input: value)
    } else {
        return deceleration(input: value)
    }
}

var speed = 10 //전역변수

moterSpeedCtroller(status: true, value: speed) // speed == 11
moterSpeedCtroller(status: false, value: speed) // speed == 9
//함수 밖에 있는 변수(전역변수)를 함수 내에서 수정할 경우 함수 밖에 있는 변수에는 영향을 미치지 않는다.
//영향을 미치게 하기 위해서는 inout키워드 필요

 

함수의 주의점 정리

함수의 파라미터 함수의 파라미터 값은 변수가 아닌 상수입니다. 함수 내에서 새로운 변수를 사용하고 싶으면 별도로 선언해야 합니다.
함수의 스코프 함수 내에서 정의된 변수 또는 상수는 "{ }" 함수의 스코프를 벗어나면 사용할 수 없습니다.
함수의 호출 리턴타입이 있는 함수의 경우 함수의 호출이 표현식입니다. ex). age() == 30
함수의 중첩 함수내에 함수를 사용할 수 있습니다. 변수와 마찬가지로 함수내에서 작성된 함수는 함수 밖에서는 사용할 수 없습니다.

 

728x90

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

함수의 오버로딩  (1) 2024.11.08
함수의 표기법(시그니처 표기법)  (0) 2024.11.08
함수의 활용  (0) 2024.11.07
함수(Function)  (0) 2024.11.07
반복문 (While문)  (5) 2024.11.06