240314
함수 Funtion
장점 : 재사용성
함수를 호출한다 라고 말한다
print 함수
print("hello") //hello 가 파라미터
//전달할 파라미터가 없다면
print()
함수를 만드는것 : 함수를 선언한다 라고 말한다
func sayHello() {
print("Hello")
}
//여기까지 작성한걸 실행 해보면 아무일도 안일어난다
//기능을 만들어 두기만 한 것. 함수바디에 있는걸 호출 하려면 함수를 호출해야한다
sayHello()
Return Values
- 리턴타입, 리턴형(리턴하는 자료형) 이라고 불리기도 함
중요 ! ! 리턴타입을 선언했으면 반드시 같은 타입의 값을 리턴해야한다
//작성하는 형식
func add () -> Int {
return 1 + 2 //함수 바디에 문장이 한줄이면 return 생략 할 수 있음
}
//함수호출식은 표현식이고, 함수가 리턴하는 값은 표현식의 결과가 된다
//그래서 아래의 코드를 작성 할 수 있다
if add() == 3 {
print("three")
}
예제) 짝수면 리턴하는 함수
func printRandinEvenNumber() {
let rnd = Int.random(in: 1...100)
if !rnd.isMultiple(of: 2) { //짝수가 아니면. 그니까 홀수면 return. 암것도 안함
return
}
print(rnd) //짝수면 출력!
}
printRandinEvenNumber()
강의에서 작성한 함수
func printRandinEvenNumber() {
let rnd = Int.random(in: 1...100)
if rnd.isMultiple(of: 2) { //짝수면 출력!
return print(rnd)
}
}
printRandinEvenNumber()
Q : 이렇게 해도 똑같은데 강의에선 왜 위처럼 작성했을까?
Parameters
- 함수에서 입력에 해당하는 값. 입력이 없으면 파라미터를 적지 않아도 된다. 여러개 전달도 가능
- 형식추론이 안되기 떄문에 반드시 타입을 적어줘야한다
func add () -> Int {
return 1 + 2
}
위에서 썻던 코드를 가져와 봤다
여기선 리턴이 고정되어 있는데, 사실 문법 공부하는거 아니면 재사용도 못하기 떄문에 쓸데없는 코드다
이걸 파라미터를 활용해서 바꿔보겠다
func add(a: Int, b: Int) -> Int {
return a + b
}
함수를 수정한 뒤 호출 하려고 보니
자동완성이 된다 !
여기서 팁! 저런 창이 안뜬다면 esc 를 눌러보자
직접 입력하는 것도 가능하지만 귀찮으니 자동완성을 애용해보자
여기서 또 팁 ! Int 부분에 네모 박스가 쳐있는데 클릭 하지 않고 tab 키를 누르면
파란색으로 활성화 된 모습을 볼 수 있다
이상태로 숫자를 입력하고 다시 tab 을 눌러서 다음 값도 입력하면 된다
//파라미터 기본값 설정
func sayHello(to: String = "Stanger") {
print("Hello, \(to)")
}
sayHello(to: "Swift") //Hello, Swift
sayHello() //Hello, Stanger 파라미터를 생략하면 기본 값이 출력된다
추가로 파라미터에 대해서 !
1) 파라미터는 함수 바디에서 사용하는 임시상수이다. 고로 값을 못바꿈
2) 파라미터의 스코프는 함수바디로 제한 된다. 함수 밖에서는 접근 할 수 없다
3)파라미터는 함수의 실행 할 때 자동으로 생기고 실행이 끝나면 자동으로 사라진다.
스코프 안에서만 사용할 수 있다는 것도 이 때문이다.
4) 파라미터 이름
함수에서 선언된건 formal Parameter
함수를 호출 할 때의 파라미터는 Actual Parameter, Argument(인자) 라고 한다
func add(a: Int, b: Int) -> Int { //여기서 선언된 파라미터는 formal Parameter
return a + b
}
add(a: 12, b: 34) //실제로 값을 넣는 것 Actual Parameter, Argument(인자)
Arument Label
1. 이름
func sayHello(name: String) { //함수식에 있는 name은 파라미터 이름
print("Hello, \(name)")
}
sayHello(name: "Swift") //호출식에 있는 name은 Argument Label
2. 함수명이 같아도 에러가 안나는 이유 : 함수식에 Arument Label이 있기 때문에 두개의 함수가 구분 된다
func sayHello(name: String) { //함수식에 있는 name은 파라미터 이름
print("Hello, \(name)")
}
func sayHello(to name: String) { //함수식에 Arument Label "to" 가 있기 때문에 위에 함수랑 구분 된다
print("Hello, \(name)")
}
3. argument label 은 함수를 호출 할 때 사용하는 네임이고, 함수바디에서 파라미터에 접근 할 때 사용하는건 아니다
4. Argument Label 생략. wildcard Pattern으로 생략
//기존함수
func sayHello(to name: String) {
print("Hello, \(name)")
}
sayHello(to: "Swift")
//wildcard pattern 사용
func sayHello(_ name: String) {
print("Hello, \(name)")
}
sayHello("Swift") // to: 가 생략 됨
'iOS Swift > 문법' 카테고리의 다른 글
[Swift] Enumeration Types 열거형 (0) | 2024.03.15 |
---|---|
[Swift] Dictionary (1) | 2024.03.15 |
[Swift] Break, continue Statement (3) | 2024.03.14 |
[Swift] Loop Statements (Range Operators, for-in Loop) (0) | 2024.03.14 |
[Swift] Assignment Operators 할당 연산자 (0) | 2024.03.14 |
댓글