Swift

Swift | 함수

iOSDEv 2024. 1. 16. 13:57
함수
Function
특정한 작업을 수행하는 코드의 묶음에 명칭을 부여하여 사용

 

함수 정의
//1. 함수 정의
func sayHi() {
    print("hello!")
    print("hello is 안녕")
}

// 2) 함수 실행문(call)

sayhello()


print("hello")
  • 함수를 사용하는 이유?
    • 반복적인 코드를 묶어서 함수로 만들 수 있다(내가 사용하고 싶을 때 마음대로 사용할 수 있다)
    • 함수를 사용하지 않는다면 아무것도 출력 안됨
    • 함수를 만들어놓으면 개발자는 사용만 하면되는데 여기서 print()도 애플이 미리 만들어놓은 함수라는점!
    • 함수의 실행
      • 소괄호를 열고 닫는 () 행위 자체는 함수의 실행
함수가 인풋이 있는 경우

 

  • input은 매개변수가 있는 경우 매개변수의 명과 데이터 타입은 내 마음대로 정할 수 있다
  • 매개 변수는 내부에 활용이 되어야 한다
  • 내부에서 사용되는 경우 상수(let)형이기 때문에 변수 하나를 따로 또 만들어서 넣어주고 사용해야한다

 

 

함수가 아웃풋이 있는 경우
  • 함수 앞에 return이라는 키워드를 사용해야 한다
  • 순서
    • 함수를 정의한 후 화살표 표시를 한 다음
    • -> 반환타입 기재
    • {괄호 내부에 마지막으로 return 반환 데이터 타입과 동일한 타입의 변수를 기재}

 

인풋과 아웃풋이 모두 있는 경우
// 함수 정의문
func someFuntions(x: Int) -> Int {
    
    var y = 2 * x + 3
    
    return y
}



// 함수 실행문(call)
someFuntions(x: 2)

 

void 타입의 이해(인풋과 아웃풋이 없는 경우)

 

  • 출력만 하고 변하는건 없음
  • void란? empty라는 의미임
    • input, output이 있을 때 결과값이나 함수안에서 변화된는 값이 있음
    • 없으면 반환하거나 파라미터로 통하여 값이 변하는 일이 없음(전역변수에서 건드리는 경우엔 값이 변경 가능할 수도 있음)

 

함수의 응용

 

함수의 파라미터, 아규먼트
: 내부 함수에는 짧고 단순하게 사용하기 위해 파라미터 이름을 사용
아규먼트 레이블로 길게 정의가 가능하여 명확하게 어떤것인지 추후에 알기 쉽기 때문이다

 

// 아큐먼트 레이블을 사용하면

//memo
//이름을 재 정의를 사용할 수 있다
//재정의를 하게되면 외부에서 name이 사용되는것이 아닌 first로 보인다
//외부 : first 내부 : name
//사용 이유 : 길게 정의하여 좀 더 명확하게 어떤것인지 추후에 알기 쉽다

func printName1(first name: String) {
    print("나의 이름은 \(name) 입니다.")
}



printName1(first: "뉴턴")

 

아규먼트 레이블을 생략해서 사용하는 방법?
: 와일드카드 패턴

 

  • 누가봐도 명확한 함수이기 때문에 없어도 될 경우

 

가변파라미터
: 함수에서 파라미터의 갯수가 아직 정해지지 않는 여러개의 값을 넣는것도 가능

 

  • 가변파라미터는 기본값을 가질 수 없다
  • ...의미는 여러개를 사용할 수 있다는 의미
  • double/ int 각 자료형에 맞게끔 한 타입에서 여러개의 리터럴을 추가하면 됨

 

함수의 파라미터에 기본값(디폴트) 정하는 것도 가능

 

함수의 중첩 사용 가능

 

 

함수의 지칭방법

 

 

오버로드
:같은 함수 이름명에 파라미터만 다르게 선언하여 하나의 함수로 여러개를 사용할 수 있음

 

 

 

제어전송문
: switch에서 사용하는 제어전송 명령문(흐름 제어)

 

  • break
    • switch : 케이스에서 실행하는 문장이 없을때 사용
    • 반복문 : 인접한 반복문 사이클 중지하고 다음 문장으로 실행됨

  • fallthrough
    • 무조건 다음문장도 실행하려할 때 입력

  • continue
    • 반복문 다음 주기로 넘어가서 실행

  • return
    • 리턴타입이 있는 함수 : 리턴 키워드 다음 표현식을 확인하고 그 결과 리턴
    • 리턴타입이 없는 함수 : 함수의 실행을 중지하고 함수 벗어남

  • throw
    • 에러가 발생하도록 정의된 함수
    • 에러의 타입을 리턴하면서 함수 벗어남

 

inout 파라미터
함수내의 파라미터는 기본적으로 값타입(복사되어서 전달) , 상수 타입이기 때문에 변경 불가함

 

 

  • func 함수명(파라미터명: inout 타입, 파라미터명: inout 타입)
  • 함수의 실행
    • 함수명(a:&num1, b:&num2)

inout 파라미터 사용시 주의할 점
- 상수나 리터럴 전달하는것은 불가능
- 파라미터의 기본값 선언을 허용하지 않음
- 가변파라미터로 선언하는것 불가능

 

Func x guard문
if문은 조건이 여러개 있을 때 코드의 가독성이 문제가 되어 guard문 사용

guard문에 조건을 만족하지 않으면 else문에 들어가 조기종료가 가능한데 여기서
return / throw / break / continue등을 사용할 수 있다

 

discardableResult
  • 결과값을 사용하지 않아도 된다고 컴파일러에게 정보를 알려줌

 

 

이 게시글은 앨런 Swift문법 마스터 스쿨을 보고 작성하였습니다