[Swift 기초] - 함수와 관련된 용어들을 짚고 넘어가보자

justdotheg·2023년 9월 28일
0
post-thumbnail

목차
1. scope
2. Argument Label
3. inout 키워드
4. 값/참조에 의한 전달
5. 매개변수, 인자 등의 용어 정리

1. scope

스코프(scope) : 변수와 상수를 사용할 수 있는 유효한 범위

  • 메모리의 생성/소멸 시점과 관련이 있다.
  • scope가 다르면 같은 이름의 변수를 사용해도 에러가 발생하지 않는다.

    ➡️ 코드 설명: scope가 func 안에 있는 sum과 다르므로 아래 코드는 에러가 발생하지 x

2. Argument Label

아규먼트 레이블(argument label) : 펑션의 매개변수 입력값에 대한 설명

2.1. 사용 방법

  • 펑션 정의할 때 파라미터 이름 앞에 선언
  • 함수 호출시 파라미터 이름이 아니라 라벨 이름을과 값을 넣고 호출해야 한다.
    ex) func(라벨 : 값)
  • 보통 argument label은 입력값에 대한 설명을 담으므로 길게 작성하고, parameter 이름은 간결하게 작성하여 함수 내부에서는 간결한 parameter 네임을 사용한다.
  • arguent label은 _를 통해 생략도 가능하다.
  • argument label에 언더스코어(_)를 쓰면 C 스타일로 함수 호출시 매개변수 이름과 설명을 생략하고 호출이 가능하다. 보통은 아규먼트 라벨 사용 안 해도 파라미터 이름은 작성해야 한다.
  • 매개변수의 argument label을 다른 이름으로 주면 같은 이름의 펑션이 있더라도 다르게 인식하여 에러가 발생 x

2.2. 왜 쓸까?

1) 자동입력에 매개변수 이름이 아닌 레이블이 뜨면서 입력값에 대한 설명을 보여준다.

[설명] 원래는 num1과 num2로 파라미터를 선언하였지만 Argument Label을 devideFirstNumber, bySecondNumber, multiflyFirstNumber, bySecondNumber로 주었다.

2) 개발자가 펑션 호출시 파라미터의 역할을 라벨을 통해 확인할 수 있다.

3. inout 키워드

💁🏻‍♂️ 펑션의 매개변수는 변수일까 상수일까?
let 키워드로 되어있는 상수이다.

  • swift에서 매개변수를 상수로 만든 이유는 함수 안에서 매개변수로 넘겨준 변수의 값을 실수로 변경 못 하게 하기 위해서이다.

    [설명] num2에 7을 대입하면 num2는 상수이기 때문에 Error가 발생한다. Cannot assign to value: 'num2' is a 'let' constant

💁🏻‍♂️ 그렇다면 매개변수로 넘겨준 값울 변경하기는 아예 불가능할까?
inout 키워드를 통해 가능하다.

  • inout 키워드는 call by reference 방식으로 매개변수에 변수를 넘겨주게 되는 방식이다.

    [설명] inout 키워드를 num2에 선언 후 7을 대입하면 에러가 발생하지 않는다. num2는 inout 키워드를 통해 var(변수)로 선언되었기 때문이다.

💁🏻‍♂️ inout 키워드로 선언된 펑션의 매개변수는 var(변수)이다.

  • inout 키워드가 선언되지 않은 일반 매개변수는 모두 let(상수)로 선언되어 있다.

4. 값 / 참조에 의한 전달

  • call by value (값에 의한 전달) : 값을 복사해서 전달
  • call by reference (참조에 의한 전달) : 참조할 변수의 주소를 전달

⬆️ 변수 선언시 초기값으로 test1은 1, test2는 2이다.

⬆️ inoutTest2 펑션에 test1은 call by value로 전달하고, test2는 call by reference로 전달한다. 그리고 출력해본다. 1과 2를 전달했다면 1+2인 3으로 출력되어야 할 것 같지만 8로 출력되고 test2는 7로 바뀌어있다.

⬆️ test1은 1이라는 값이 복사되어 num1(상수)에 1이 대입된다. 하지만 num2(변수)에는 test2 메모리를 가리키고 있는 주소가 전달되면서 test2 메모리를 num2도 가리키게 된다. 따라서 num2에 7이라는 값을 주면 test2와 num2 모두 7로 변경된다. num1과 num2를 더하면 1 + 7이므로 8이다.

5. 매개변수, 인자 등의 용어 정리

  • parameter = 매개변수
  • argument = 입력값 = 인자, 인수
  • argument label = 입력값에 대한 설명

⬆️ 파라미터, 매개변수로 num1과 num2가 있다.

⬆️ argument, 인자, 인수로 1과 2를 주었다. argument label, 입력값에 대한 설명으로 firstNumber, secondNumber가 있다.

0개의 댓글