Skip to content

Latest commit

 

History

History
81 lines (62 loc) · 4.47 KB

Ch5_array5.md

File metadata and controls

81 lines (62 loc) · 4.47 KB

함수의 파라미터로 변수에 할당된 배열 전달하기

배열을 만들어 변수에 할당한 후 함수를 호출할 때 파라미터로 전달할 수도 있다. 함수를 호출하면서 배열을 전달하는 예제를 만들어 보겠다.

func checkName(names:[String]) {
    if names.first == "소녀시대" {
        print("Error.")
    } else {
        print("OK.")
    }
}

let names = ["소녀시대", "걸스데이", "티아라"]
checkName(names: names)

출력값) Error.

checkName 함수에는 names라는 이름의 파라미터가 전달된다. names 파라미터는 문자열 원소들을 갖는 배열이며, 함수 안에서는 배열의 첫 번째 요소가 '소녀시대'인지 확인한다. 배열의 첫 번째 요서와 마지막 요서는 다음과 같이 first와 last 속성으로 접근할 수 있다.

배열.first -> 첫 번째 요소
배열.last -> 마지막 요소

코드를 실행하면 위의 출력값처럼 'Error.'라는 메세지가 출력되는 것을 볼 수 있다. 함수로 전달된 배열의 첫 번째 원소가 '소녀시대'라는 값을 가지고 있었으니 'Error'라는 메세지가 출력되는 것이 정상이다.

값 전달 방식으로 동작하는 배열

그런데 함수로 전달하는 파라미터는 함수 안에서 상수로 인식된다. 따라서 함수 안에서는 배열 객체를 변강할 수 없다는 것을 기억하자. 만약 함수 안에서 파라미터로 전달된 배열에 새로운 원소를 추가하려고 하면 오류 메시지가 표시된다. 즉, 스위프트의 배열은 '참조 전달 방식'이 아닌 '값 전달 방식'을 사용한다. 예를 들어, Person 클래스로부터 만들어진 인스턴스 객체를 변수에 할당하면 이 변수는 인스턴스 객체를 가리키지만 배열 객체를 만들어 할당하면 이 변수에는 배열 객체가 복사되어 들어간다.

배열을 다른 변수에 할당하는 코드를 만들기 위해 다음 코드를 추가한다.

var names2:[String] = ["소녀시대", "걸스데이", "티아라"]
var names3 = names2

names2.append("에이핑크")
print(names2)
print(names3)

if names2 != names3 {
    print("두 개의 배열이 다릅니다.")
}

출력값) ["소녀시대", "걸스데이", "티아라", "에이핑크"]
출력값) ["소녀시대", "걸스데이", "티아라"]
출력값) 두 개의 배열이 다릅니다.

배열을 다른 변수에 할당하면 새로운 배열 객체가 복사되어 만들어진 후 할당된다. 따라서 이름이 세 개 들어 있는 names2 변수를 names3 변수에 할당하면 새로운 배열 객체가 만들어진 다음 할당된다. names2 배열에 새로운 이름을 하나 더 추가한 후 names2 배열의 원소들을 출력해 보면 새로운 이름이 보이지만 names3 배열의 원소들을 출력해 보면 새로운 이름이 보이지 않는다. 그리고 배열은 값 전달 방식을 사용하므로 배열끼리 비교할 때는 == 연산자나 != 연산자를 사용한다.

여러 개의 값을 한꺼번에 넣고 그 안에 들어 있는 원소들을 다루다 보니 코드가 조금 더 복잡해 졌다고 느껴질 수 있다. 그래도 실제 코드를 만들 때는 여러 개의 값을 함께 다루는 경우가 많으므로 익숙해지는 것이 좋다.

Quiz 24

가족 구성원의 이름을 넣은 배열을 만든 후 그 끝에 새로운 이름을 넣었다가 빼도록 해 보세요. 배열을 만들 때 초기 값으로 가족 구성원의 이름을 넣어줍니다. 이렇게 만든 배열의 끝에 새로운 이름을 하나 추가한 후 몇 개의 이름이 들어 있는지 출력합니다. 그리고 끝부분에 추가했던 이름을 꺼낸 후 그 이름을 출력하고 몇 개의 이름이 남아 있는지 출력합니다.

var members = ["엄마", "아빠", "동생", "", ""]
print("가족 구성원의 수는? : \(members.count)")

members.append("누나")
print("가족 구성원의 수는? : \(members.count)")

let last = members.popLast()
print("빼낸 마지막 가족 구성원은? : \(last!)")
print("가족 구성원의 수는? : \(members.count)")

출력값) 가족 구성원의 수는? : 5
츌력값) 가족 구성원의 수는? : 6
출력값) 빼낸 마지막 가족 구성원은? : 누나
출력값) 가족 구성원의 수는? : 5

Ch5_array6.md 파일로 가기

Swift Study Contents로 돌아가기