[Swift 문법] 6. 함수 (Function)

JJOOEE__·2024년 6월 4일
0

Swift 문법

목록 보기
12/13
post-thumbnail

🍎 6. 함수

🍏 1. 함수 ? 메서드?

함수 : 우리가 func로 생성하는 모든 것

func anything() {
     print ("something")}

◻️ ② 메서드 : 클래스, 구조체, 열거형 속에 포함된 함수

class joohee{
   func anything() {
     print ("something")
     }
}

첫번째 예시에선 anything이 함수였지만,
두번째 예시에선 class안에 속해있기 때문에 메서드라고 하는것!

🍏 2. 함수 선언 방법

사용자 정의함수를 정의하는 방식

func 함수이름(매개변수1: 타입, 매개변수2: 타입 .....) -> 반환타입{
    실행내용
    return 반환값
}

◻️ 1) func 키워드

함수를 선언하기 위해서는 func이라는 키워드를 사용해야함

◻️ 2) 함수이름

func 뒤 한칸 띄고 함수의 이름을 설정

lowCamelCawe : 카멜 표기법 사용
띄어쓰기 없이 이름을 짓기 위하여 따르는 네이밍 컨벤션
단어 전체적으로 소문자를 사용하지만, 맨 첫글자를 제외한 각 합성어의 첫 글자만 대문자로 표기한다!

올바른 예시) camelCase, firstNumber,
잘못된 예시) camel_case(스네이크표기법)

◻️ 3) parameter (파라미터 / 매개변수)

  • 매개변수는 함수가 정의될 때 함수가 전달받게 되는 변수(상수) 혹은 그 이름

🌈매개변수가 없는 함수와 매개변수가 여러 개인 함수

  • 매개변수가 없는 함수
func hellojoohee() -> String {
    return "안녕, 주희!"
}

print(hellojoohee()) // 안녕, 주희!
  • 매개변수가 여러개인 함수
    • 매개변수가 여러 개 필요한 함수를 정의할 때는 쉼표로 매개변수를 구분
    • 매개변수 이름을 붙여주고 콜론( : )을 적어준 후 전달 인자를 보내준다는 것
    • 매개변수 뒤에 붙는 이름을 매개변수 이름
func welcome(myname: String, yourname: String) -> String {
    "안녕하세요 \(yourname)님! 저는 \(myname)라고 합니다!"
}

print(welcome(myname: "주희", yourname: "미진"))
// 안녕하세요 미진님! 저는 주희라고 합니다!

◻️ 4) 파라미터 선언방식

🌈 ① Argument Label과 Parameter Name 각각 명시하기

Argument Label : 함수를 호출할 때 사용하는 이름
Parameter Name : 함수내에서 사용할 파라미터의 이름

예시

위 예시의 함수에서 Argument Label과 Parameter Name를 각각 찾아보면
Argument Label = 불러
Parameter Name = 이름

Argument Label 불러는 함수를 호출할 때 사용되고
Parameter Name 이름은 받은 파라미터를 함수 내부에서 사용할때 사용한다!

중요!!

print 함수를 사용할때 보통 우리는

print("joohee")

로 Argument Label없이 사용해왔다!!

이건 함수의 원형을 확인하면 알 수 있다

예시
func calculate(_ operator: Character....)
  • Argument Label을 생략하고 싶다면 _를 사용해서 생략이 가능함
    • Argument Label을 생략한 함수는 함수 호출시에도 Argument Label을 생략이 가능함!

🌈 ② Argument Label과 Parameter Name을 한번에 명시하기

  • both로 하나만 명시할 경우,
    both가 Argument Label이자 Parameter Name이 되는것!

🌈 ③ Parameter를 받지 않는 경우

파라미터가 없다고 ()를 샹략하면 절대 안된다!!
빈 괄호를 필수로 명시해 줄 것!!

◻️ 4) Return Type (반환값)

  • Return Type은 -> 와 함께 써야함
    ->를 쓰고 그 뒤에 return 하고자하는 type을 명시해주면 됨!
  • 만약 return type 이 없는 경우 생략이 가능함

🍏 3. 함수 호출 방법


위 방법대로 호출하면 되는데 parameters에는 Argument Label이 들어감!

🍏 4. 중첩 함수

  • 중첩 함수는 상위 함수의 몸통 블록 내부에서만 함수를 사용할 수 있음
  • 중첩 함수의 사용 범위가 해당 함수 안쪽이라고 해서 아예 외부에서 사용할 수 없는 것은 아님
  • 함수의 하나의 반환 값으로 사용될 수 있으므로 중첩 함수를 담은 함수가 중첩 함수를 반환하면 밖에서도 사용할 수 있음

🍏 5. 데이터 타입으로서의 함수

(매개변수 타입의 나열) -> 반환타입
  • welcome 함수 타입이 (String, Int) -> String
func welcome(name: Stirng, times: Int) -> String {
    // 구현부
}
  • sayHelloToFriends 함수 타입은 (Stringm String...) -> String
func sayHelloToFriends(me: String, names: String...) -> String {
    // 구현부
}
  • 매개변수가 변환 값이 없다면 Void 키워드를 사용하여 반환 값이 없다고 나타내야 함
func Goodbye() {
    // 구현부
}

3가지는 모두 같은 표현임

(Void) -> Void
() -> Void
() -> ()

◻️ 1) 삼항 연산자로 표현

  • 논리 연산자 코드를 삼항 연산자로 표현도 가능
func greet(name: String) -> String {
    if name == "JJOOE" {
        return "Oh wow!"
    } else {
        return "Hello, \(name)"
    }
}
func greet(name: String) -> String {
    if name == "JJOOE" {
        "Oh wow!"
    } else {
        "Hello, \(name)"
    }
}
//return이 빠졌기 때문에 런타임 오류가 생김

위 코드를 삼항연산자로 변경

func greet(name: String) -> String {
  name == "JJOOE" ? "Oh wow!" : "Hello, \(name)"
}

◻️ 2) 매개 변수가 없는 경우

//매개변수가 없다면 ()으로 작성
func 함수이름() -> 반환타입 {
    //함수 구현부
   return 반환값 
}

◻️ 3) 반환 타입이 없는 경우

🌈 ① 그럴때는 반환타입이 들어가는 부분에 Void

func 함수이름 (매개변수1이름: 매개변수1타입, 매개변수2이름: 매겨변수2타입 ...) -> Void {
   //함수 구현부
  return 반환값
}

🌈 ② Void 부분 즉 반환타입을 생략

func 함수이름 (매개변수1이름: 매개변수1타입, 매개변수2이름: 매겨변수2타입 ...) {
   //함수 구현부
}

◻️ 4)매개변수와 반환 값이 둘 다 없는 경우

🌈 ① 매개변수에 ()를 넣고 반환값에 -> Void 를 추가

func 함수이름() -> Void {
    //함수 구현부
}

🌈 ② 반환값의 Void를 생략

func 함수이름() {
    //함수 구현부
}

func HelloWorld() {
    print("Hello, World!")
}
HelloWorld() //Hello, World!

func welcome(me myname: String, you yourname: String) {
    print("안녕하세요 저는 \(myname) 입니다! 잘 부탁드려요 \(yourname)씨! ")
}
welcome(me: "주희 you: "미진") // 안녕하세요 저는 주희니다! 잘 부탁드려요 미진씨!

func sayGoodbye() -> Void {
    print("Good bye!")
}

sayGoodbye() // Good bye!
//반환값이 없어 코드가 짧다면 이렇게 한줄로 표현하는것이 좋습니다.
func hello() -> Void { print("hello") }

func bye() { print("bye") }
  • 함수호출
hello() // hello

bye() // bye

🍏 6. 함수에서 두 개 이상의 값을 반환하려면??

  • 튜플을 사용한다 (name: String, age: Int)
  • 배열 또는 딕셔너리 같은 컬렉션을 사용한다.
profile
개발이 어려운 나를 위한... 개발노트

0개의 댓글