티스토리 뷰
1) 정의
* 일련의 작업을 수행하는 코드 묶음을 식별할 수 있는 특정한 이름을 부여하여 사용하는 것
* 함수 문법(function Syntax)
func 함수명(파라미터 : 타입) -> 반환타입 {
내용
return 반환값
}
2) 유형
* 인풋과 아웃풋이 모두 있는 것(Fuction)
* 인풋이 없고 아웃풋만 있는 것(Generator)
* 인풋이 있고 아웃풋은 없는 것(Consumer)
* Input과 아웃풋이 모두 없는 것
3) 함수의 기본
// Example. 1 파라미터, 반환타입, 반환값이 없는 함수
var x = 0
func addOne2() {
x += 1
print(x)
}
addOne2() * 결과 : 1
// Example. 2 파라미터, 반환타입, 반환값이 있는 함수
func greet(person: String) -> String { * 파라미터명 : Person, 파라미터 타입 : String, 반환값 타입 : String
let greeting = "Hello, " + person + "!" * 상수 greeting의 타입 : String
return greeting
}
greet(person: "Anna") * 결과 : "Hello, (Anna)!" * (괄호) 부분이 입력한 파라미터 'person' 가 들어간 부분
greet(person: "Brian") * 결과 : "Hello, (Brian)!"
// 더 생각해보기 : 위의 함수 내용에서 내용을 결합하고 한 줄로 반환값 리턴하기(Combine the message creation and the return statement into one line)
func greetAgain(person: String) -> String {
return "Hello, " + person + "!" * 굳이 상수를 하나 선언할 필요가 없어져 코드가 간결해졌다.
}
greetAgain(person: "Anna") * 결과 : "Hello, Anna!"
// 여러 개의 파라미터가 있는 함수(Function with Multiple Parameters)
func addNumbers(a: Int, b: Int) -> Int {
return a + b
}
addNumbers(a: 10, b: 20) * 결과 : 30
addNumbers(a: 3, b: 5) * 결과 : 8
4) 함수의 심화 - 외부 매개변수(Argument Label)
// 외부 매개변수 Example 1. 선언 방법
func functionName(labelname name: Type) -> ReturnType {
contents
return valueofReturn
}
* labelname = 외부 매개변수(Argument Label), name : 파라미터(Parameter), 내부 매개변수
// 외부 매개변수 Example 2. 기본적으로 매개 변수는 매개 변수 이름을 인수 레이블로 사용 합니다.
Example.
func someFunction(firstParameterName : Int, secondParameterName: Int) {
print(firstParameterName, secondParameterName)
}
someFunction(firstParameterName: 1, secondParameterName: 2)
// 외부 매개변수 Example 2. 외부 매개변수가 생략된 함수(Omitting Arguments Labels) : '_' 을 사용하여 생략한다.
func someFunction(_ firstParameterName : Int, secondParameterName : Int) {
print(firstParameterName, secondParameterName)
}
//
someFunction(firstParameterName : 1, secondParameterName : 2) 과 아래는 동일
someFunction(1, secondParameterName: 2)
* 매개변수명 생략. 파라미터명을 사용해줘도 되지만 생략된 외부 매개변수명 덕분에 그냥 1만 입력.
// 외부 매개변수를 활용한 함수(Specifying Argument Labels)
func someFunction(argumentLabel parameterName: Int) {
* (외부 내부매개변수: 타입) 순으로 선언
print(parameterName)
}
* 함수 내부에서는 파라미터 명(parameterName)을 사용했고, 아래 외부에서는 외부 매개변수(argumentLabel)를 이용해 선언하였다.
someFunction(argumentLabel: 10)
// 파라미터 값을 설정하여 사용한 함수 구문(Default Parameter Values)
func functionWithDefault(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) -> Int {
return parameterWithDefault
}
functionWithDefault(parameterWithoutDefault: 3, parameterWithDefault: 6)
* 뒷부분에 값을 수정하여 선언하였다.
functionWithDefault(parameterWithoutDefault: 4)
* parameterWithDefault 값이 선언되지 않았기 때문에 함수에서 선언한 그대로 12.
Question. 매개변수를 하나만 쓰면 되는건데, 왜 굳이 따로 나눠 쓰나요?
Answer. 여러가지 이유가 있겠지만, 그 중 하나는 내부적으로 함수를 모두 내 마음대로 작성했는데, 외부에서 보았을 때, 그 매개변수의 의미를 분명히 해주기 위한 이유도 있다.
5) 함수의 심화 - Variaric Parameters("파라미터의 개수를 여러 개 쓰고 싶은데, 몇 개가 들어갈지 잘 모르겠어요..." 일 때 쓸 수있는 방법)
* Variaric Parameters Example 1.
func arithmeticMean(_ numbers: Double...) -> Double { * 앞선 경우와는 다르게 파라미터의 타입 뒤에 ... 이 붙으신거 보이시죠? 저렇게 쓰시면 됩니다..
var total: Double = 0.0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
arithmeticMean(1, 2, 3, 4, 5)
arithmeticMean(3, 8.25, 18.75)
arithmeticMean(1, 2.5, 4, 8.5) * 맨 위 파라미터 개수는 5개, 그 다음은 3개, 그 다음은 4개... 자기 맘대로 파라미터 개수를 늘려가며 사용하고 싶을 때 유용합니다.
// 위의 함수와 아래 함수의 차이를 구분해보자 !!!!!!!!!!!!!!
func arithmeticMean1(_ numbers: Double..., and last: Double) -> Double {
print(numbers)
print(last)
return last
}
Question. arithmeticMean1(1, 2, 3, 5) 을 사용하면 왜 오류가 발생할까?
Answer. 어디까지가 numbers 고 어디가 last 인지 알 수 없기 때문에, "Missing argument for parameter 'and' in call" 오류 발생
// 바로 위 함수와 아래의 함수를 비교해보자 !!!!!!!!!
func arithmeticMean2(_ numbers: Double..., and last: Double) -> Double { // numbers 가 파라미터
print(numbers)
print(last)
return last
}
arithmeticMean2(1, 2, 3, and: 5)
Question. 이 함수의 결과는 오류가 발생하지 않습니다. 왜일까요?
Answer. 1,2,3 이 numbers의 파라미터, 그리고 5가 and(last의 외부 파라미터명) 파라미터. 명시적으로 선언이 되었기 때문에 오류 발생하지 않는다.
이상으로 함수의 기본에 대해서 알아보았습니다 !
made by Inswag's Swift in FastCampus 7th iOS Development School
'Programming > Swift' 카테고리의 다른 글
1. Swift : 조건문(Conditional Statements) (0) | 2018.05.23 |
---|---|
1. Swift : 접근 제어(Access Control) (0) | 2018.05.22 |
1. Swift : 타입 변환(Type Conversion) (0) | 2018.05.16 |
1. Swift : 리터럴, 타입(Literals & Types) (+ 타입 앨리어스) (0) | 2018.05.16 |
1. Swift : 연산자(Operator) (0) | 2018.05.15 |
- Total
- Today
- Yesterday
- inswag
- 패캠
- function
- 개발스쿨
- OOP
- commit
- Operator
- ios
- 패스트캠퍼스
- Dictionary
- tca
- var
- 깃허브
- 컨버전
- iOS개발스쿨
- 타입
- swiftUI
- fastcampus
- array
- fallthrough
- Swift
- 열거형
- 리터럴
- ARC
- 프로그래밍
- lifecycle
- GCD
- 딕셔너리
- 튜플
- 스위프트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |