카테고리 없음

iOS 4주차(09.26)

k0223 2024. 9. 26. 16:50

C 언어에서의 특성Parameter (매개변수)Argument (인수)의 차이

정의 함수 선언 및 정의에서 사용되는 변수 함수 호출 시 전달되는 실제 값
위치 함수 헤더에 위치 함수 호출 시 괄호 안에 위치
역할 함수 내에서 사용될 데이터의 타입과 이름을 지정 함수에 실제 데이터를 전달
개수 함수 정의에 따라 고정됨 함수 호출 시 parameter 수와 일치해야 함
예시 코드 void func(int a, float b) func(5, 3.14)
메모리 함수가 호출될 때 스택에 생성됨 호출 전에 이미 존재하는 값
값 변경 함수 내에서 변경 가능 (지역 변수로 작동) 원본 값은 변경되지 않음 (값에 의한 전달의 경우)
C++ 언어에서의 특성Parameter (매개변수)Argument (인수)의 차이
정의 함수 선언 및 정의에서 사용되는 변수 함수 호출 시 전달되는 실제 값
위치 함수 헤더에 위치 함수 호출 시 괄호 안에 위치
역할 함수 내에서 사용될 데이터의 타입과 이름을 지정 함수에 실제 데이터를 전달
기본값 설정 가능 (예: void func(int a = 0)) 해당 없음
참조 전달 가능 (예: void func(int& a)) 변수 자체를 전달 가능
상수 참조 가능 (예: void func(const int& a)) 값 또는 변수 전달 가능
포인터 가능 (예: void func(int* ptr)) 주소값 전달
함수 오버로딩 타입과 개수로 구분 호출 시 적절한 함수 선택
템플릿 사용 가능 (예: template<typename T> void func(T arg)) 다양한 타입 전달 가능
가변 인자 가능 (예: void func(int count, ...)) 여러 개의 인수 전달 가능
람다 함수 매개변수로 사용 가능 함수 객체로 전달 가능
메모리 할당 함수 호출 시 스택에 생성 호출 전에 이미 존재하는 값
값 변경 함수 내에서 변경 가능 (참조 아닌 경우 지역적) 원본 값은 변경되지 않음 (참조 제외)

 

 

Swift에서 함수를 만들고 사용하는 방법을 예를 들어 설명해드리겠습니다.

함수 정의

Swift에서 함수는 func 키워드를 사용하여 정의합니다.

func greet(name: String) -> String {

return "Hello, \(name)!"

}

이 함수는 name이라는 String 타입의 매개변수를 받아 String 타입의 값을 반환합니다.

함수 호출

정의한 함수는 다음과 같이 호출할 수 있습니다:

let greeting = greet(name: "Alice")

print(greeting) // 출력: Hello, Alice!

매개변수 레이블

Swift에서는 매개변수 레이블을 사용하여 함수 호출 시 가독성을 높일 수 있습니다.

func greet(to name: String) -> String {

return "Hello, \(name)!"

}

let greeting = greet(to: "Bob")

print(greeting) // 출력: Hello, Bob!

여기서 to는 외부에서 사용하는 매개변수 레이블이고, name은 함수 내부에서 사용하는 매개변수 이름입니다.

기본값 매개변수

매개변수에 기본값을 지정할 수 있습니다:

func greet(name: String = "Guest") -> String {

return "Hello, \(name)!"

}

print(greet()) // 출력: Hello, Guest!

print(greet(name: "Charlie")) // 출력: Hello, Charlie!

가변 매개변수

함수가 여러 개의 동일한 타입의 값을 받을 수 있도록 가변 매개변수를 사용할 수 있습니다:

 

func calculateSum(_ numbers: Int...) -> Int {

return numbers.reduce(0, +)

}

print(calculateSum(1, 2, 3, 4, 5)) // 출력: 15

반환값이 없는 함수

함수가 값을 반환하지 않는 경우, 반환 타입을 생략하거나 Void를 사용할 수 있습니다:

 

func sayHello(to name: String) {

print("Hello, \(name)!")

}

sayHello(to: "David") // 출력: Hello, David!

 

이러한 방식으로 Swift에서 함수를 정의하고 사용할 수 있습니다. 함수는 코드의 재사용성과 구조화에 매우 중요한 역할을 합니다.

 

Xcode에서의 실행 화면입니다.

 

Xcode에서의 실행 화면입니다.

출처: 스마일 한의 iOS 기본 프로그래밍

switf에서 #function을 통해서 함수명을 호출할 수 있습니다.

switf에서의 함수명은 함수명(외부매개변수명:외부매개변수명: ...) 입니다.

 

func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {

return items.count

}

이 함수의 자료형과 함수명은

(UITableView, Int) -> Int

tableView(_ : numberOfRowsInSection)

 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

return cell

}

이 함수의 자료형과 함수명은

(UITableView, IndexPath) -> UITableViewCell

tableView(_ : cellForRowAt)

 

swift의 if문, grard문

if문은 조건이 참일 때 실행하며, guard문은 조건이 거짓일 때 실행합니다.(서로 반대라고 할 수 있습니다.)

guard문은 return, break, continue, throw 등 제어문 전환 키워드를 쓸 수 있는 상황이라면 사용이 가능합니다.

 

guard let과 if let의 사용하여 언래핑하였습니다.

 

이 처럼 if let보다 guard let이 간편하게 사용하며 보기에도 깔끔하다고 할 수 있습니다.

 

C와 C++에서의 디폴트 매개변수 작성 방법을 비교하여 설명해드리겠습니다.

특성CC++
지원 여부 지원하지 않음 지원함
선언 방법 해당 없음 타입 함수명(타입 매개변수 = 기본값)
예시 해당 없음 void greet(string name = "Guest")
다중 매개변수 해당 없음 void func(int a = 1, int b = 2, int c = 3)
함수 오버로딩과의 관계 해당 없음 오버로딩된 함수에서 사용 가능
선언 위치 해당 없음 함수 선언이나 정의에서 가능
부분적 사용 해당 없음 오른쪽부터 순서대로 지정 가능

함수가 값을 반환한 후에도 매개변수에 일어난 변화를 유지하려면,

함수의 선언부에서 매개변수를 입출력 매개변수(inout parameter)로 선언해야 합니다.