함수 Function

Lena·2021년 12월 20일
0

Swift

목록 보기
5/8
post-thumbnail

Function 선언하기

func <함수명> (<매개변수 이름> : <매개변수 타입>, <매개변수 이름>: <매개변수 타입>, ...) -> <반환값 타입> { // 함수 코드 
}

void sayHello(){ // 리턴값 없으면 void 쓰지만 swift에서는 생략가능하다 
    printf("Hello");
}
func sayHello(){ // return 값 없으면 생략이 가능하다 
    print("Hello")
}

func message(name: String, age: Int) -> String {
    return ("\(name) \(age)") 
} 

함수 정의와 호출하기

C언어에서의 함수호출

int add(int x, int y){
	return (x+y);
}
add(10, 20);

c언어 → swift 의 함수로 변경해보자

swift에서의 함수호출

func add(x:Int, y:Int)->Int{
    return (x+y)
}

let x = add(x:20, y:10)
// 상수 let에 넣자

print(x)

내부 매개변수 & 외부 매개변수

func add(first x: Int, second y : Int) -> Int{
	// 외부 내부: 자료형, 외부 내부: 자료형 -> 리턴형 

	return(x+y) 
	// 함수 정의할 때는 내부 매개변수명을 사용 
	// return(first + second) 은 오류 
} 

add(first:10, second:20) // add(x:10, y:20)은 오류 
// 함수 호출할 때는 외부 매개변수명을 사용한다. 

외부 매개변수

  • 함수를 호출할 때 바깥쪽에서 사용하는 함수
  • 함수를 호출할 때 인자값에 대한 레이블 역할을 한다.
  • 동시에 함수의 식별자 일부로 사용되기도 한다.

내부 매개변수

  • 입력된 인자값을 함수 내부에서 참조하기 위해 사용하는 변수이다.

외부 매개변수명을 생략하면

: 내부 매개변수명이 외부 매개변수명을 겸한다 (외부 내부 동일하게 사용함)
(= 별도로 외부 매개변수를 나누지 않을 경우 일반 매개변수가 인자 레이블 역할까지 겸한다)

  • 외부, 매개변수를 사용하는 경우
    func add(first x:Int, second y:Int)->Int{
        return (x+y)
    }
    
    let x = add(first:20, second:10)
    
    print(x)
  • 첫 번째 외부 매개변수는 생략하고, 두 번째 외부매개변수만 사용하는 경우 (매우 많다)
    func add(_ x: Int, with y: Int) -> Int {
        return (x + y)
    }
    
    let x = add(10, with:20)
    // 첫 번째 외부매개변수명만 생략하는 경우가 많다.
    // objectC언어의 호출방식
    // 두번째 매개변수부터는 외부매개변수를 사용
    // 많이 사용하는 방법이다.
    
    print(x)
  • 함수의 타입 출력하기 : 아래와 같이 빌드하면 (Int, Int) -> Int ⇒ 함수의 자료형
    func add(_ a: Int, with b:Int) -> Int{
        return (a+b)
    }
    print(type(of:add))

CF. Objecjective-C 함수와 C 비교

- (int) ddd:(int) x
{
	return (x*2);
}

- (void) setX: (int) x
{
	xx = x;
}

- (int) getX
{
	return (x);
}

- (int) add:(int) x with: (int) y // 두번째 파라미터부터 이름을 지정한다. 
{
	return (x+y);
}

- (void) setXY:(int) x second: (int) y{
{
	xx = x;
	yy = y;
}

디폴트 매개변수 (argument) 정의하기 = 기본값을 갖는 매개변수

함수를 정의할 때 argument로 아무것도 안 넘겨주면 기본으로 작성할 값 ⇒ 기본값을 지정할 수 있다
(c++의 디폴트 매개변수와 동일한 개념이다)

함수로부터 여러 개의 결과를 반환하기 (튜플)

  • 여러 개의 값을 반환해야 한다면 결과 값들을 튜플로 감싸서 반환할 수 있다.
  • 튜플 사용해서 값 반환 시, 함수의 반환 타입을 튜플 형태로 정의해야 한다.
  • 인치 단위의 수를 받아 yard, centimeter, meter로 변환하고 이 세개의 값을 하나의 튜플에 넣어 반환하는 예제
    func converter(length: Float) -> (yards: Float, centimeters: Float, meters: Float){
        let yards = length * 0.0277778
        let centimeters = length * 2.54
        let meters = length * 0.0254
        return (yards, centimeters, meters)
    }
    
    var lengthTuple = converter(length:20)
    print(lengthTuple.yards)
    print(lengthTuple.centimeters)
    print(lengthTuple.meters)

0.555556
50.8
0.508

가변 매개변수 Variadic Parameter

  • 입력 갯수를 제한하지 않도록 하는 함수 정의 형식을 제공한다. → ... 추가하면된다
  • 정의
    func 함수이름 (매개변수명 : 매개변수타입 ...)
  • 위와 같이 정의하면, 정의된 매개변수는 가변 argument로 인식이 된다
    → 갯수를 제한하지 않고 인자값을 입력받고 이렇게 입력받은 인자는 배열로 처리한다.
  • for ~ in 구문 이용하면 입력된 모든 인자값을 순서대로 읽을 수 있다.
  • 지정되지 않은 갯수의 String값을 매개변수로 받아서 콘솔에 출력한다
    import Foundation
    func add(numbers: Int...){
        var sum: Int = 0
        for num in numbers{
            sum += num
        }
        print(sum)
    }
    
    add(numbers:1,3,4,5,6,7,7)

강의자료 : [Smile Han 유튜브 강의 내용 정리] & [꼼꼼한 재은씨의 Swift: 문법편]

0개의 댓글