오늘의 주제
1. 함수
2. 콜렉션 타입 - 배열, 딕셔너리, 세트
안녕하세요, 야곰입니다.
지난 포스팅에서는 변수와 상수 선언방법 그리고 기초적인 데이터 타입까지 알아봤습니다.
2017/01/23 - [Swift] - Swift란 어떤 언어인가?
2017/01/25 - [Swift] - Swift 기초문법 - 변수, 상수, 기초 데이터 타입
이번에는 스위프트의 함수와 함께 스위프트에서 제공하는 컬렉션 타입에 대해 알아보겠습니다 :)
함수
대부분 함수는 작업의 가장 작은 단위이자 하나의 작은 프로그램이기도 합니다. “하나의 프로 그램은 하나의 큰 함수다”라는 말이 있듯이, 함수는 프로그램을 이루는 주된 요소 중 하나입니다. 스위프트에서 함수는 일급 객체이기 때문에 하나의 값으로도 사용할 수 있습니다.
스위프트에서 함수는 다른 언어보다 훨씬 다양한 모습으로 존재하며, 코딩 스타일도 여러 가지입니다. 따라서 개인이나 협업자끼리 코딩 규칙을 만들고 함수를 사용하기를 권합니다.
함수의 정의와 호출
스위프트의 함수는 재정의(오버라이드)와 중복 정의(오버로드)를 모두 지원합니다. 따라서 매개변수의 타입이 다르면 같은 이름의 함수를 여러 개 만들 수 있고, 매개변수의 개수가 달라도 같은이름의 함수를 만들 수 있습니다. 그렇기 때문에 예제 중간중간 이름이 같은 함수를 구현해도 오류가 발생하지 않습니다.
기본적인 함수의 정의와 호출
스위프트의 함수는 자유도가 굉장히 높은 문법 중 하나입니다. 기본으로 함수의 이름과 매개변수(Parameter), 반환 타입(Return Type) 등을 사용하여 함수를 정의합니다.
함수를 정의하는 키워드는 func입니다. 함수 이름을 지정해준 후 매개변수는 소괄호( ( ) )로 감싸줍니다. 반환 타입을 명시하기 전에 -> 를 사용하여 어떤 타입이 반환될 것인지 명시해줍니다. 반환을 위한 키워드는 다른 언어처럼 return입니다.
함수의 기본 형태는 다음과 같습니다.
func 함수이름(매개변수...) -> 반환타입 {
실행 구문
return 반환 값
}
func hello(name: String) -> String { return "Hello \(name)!" } let greeting: String = hello(name: "yagom") print(greeting) // Hello yagom!
매개변수가 없는 함수
func helloWorld() -> String { return "Hello, world!" } print(helloWorld()) // Hello, world!
매개변수가 여러 개인 함수
func sayHello(myName: String, yourName: String) -> String { return "Hello \(yourName)! I'm \(myName)" } print(sayHello(myName: "yagom", yourName: "eric")) // Hello eric! I'm yagom
컬렉션 타입
배열
var names: Array= ["yagom", "chulsoo", "younghee", "yagom"] // 대괄호를 사용하여 배열임을 표현합니다. var names: [String] = ["yagom", "chulsoo", "younghee", "yagom"] // 위의 선언과 정확히 동일한 표현으로, [String]은 Array 의 축약 표현입니다. var emptyArray: [String] = [String]() // String 데이터를 요소로 갖는 빈 배열을 생성합니다. var emptyArray: [String] = Array () // 위의 선언과 정확히 같은 동작을 하는 코드입니다. var emptyArray: [String] = [] // 배열의 타입을 정확히 명시해줬다면 []만으로도 빈 배열을 생성할 수 있습니다. print(emptyArray.isEmpty) // true print(names.count) // 4
print(names[2]) // younghee
names[2] = "jenny"
print(names[2]) // jenny
print(names[4]) // 인덱스의 범위를 벗어났기 때문에 오류가 발생합니다.
names[4] = "elsa" // 인덱스의 범위를 벗어났기 때문에 오류가 발생합니다.
names.append("elsa") // 마지막에 elsa가 추가됩니다.
names.append(contentsOf: ["john", "max"]) // 맨 마지막에 john과 max가 추가됩니다.
names.insert("happy", at: 2) // 인덱스 2에 삽입됩니다.
names.insert(contentsOf: ["jinhee", "minsoo"], at: 5)
// 인덱스 5의 위치에 jinhee와 minsoo가 삽입됩니다.
print(names[4]) // yagom
print(names.index(of: "yagom")) // 0
print(names.index(of: "christal")) // nil
print(names.first) // yagom
print(names.last) // max
let firstItem: String = names.removeFirst()
let lastItem: String = names.removeLast()
let indexZeroItem: String = names.remove(at: 0)
print(firstItem) // yagom
print(lastItem) // max
print(indexZeroItem) // chulsoo
print(names[1 ... 3]) // ["jenny", "yagom", "jinhee"]
- 중간중간 몇몇 print 함수를 실행하려고 하면 경고를 띄워주는 이유는 해당 메서드의 반환값이 옵셔널이기 때문입니다. 옵셔널에 대해서는 다음 포스팅에서 다룹니다.
- nil은 ‘없음’을 의미하는 표현입니다.
딕셔너리
// 키는 String, 값은 Int 타입인 빈 딕셔너리를 생성합니다. var numberForName: Dictionary= Dictionary () // 위의 선언과 정확히 동일한 표현입니다. var numberForName: [String: Int] = [String: Int]() // [String: Int]는 Dictionary 의 축약 표현입니다. // 딕셔너리의 키와 값 타입을 정확히 명시해줬다면 [:]만으로도 빈 딕셔너리를 생성할 수 있습니다. var numberForName: [String: Int] = [:] var numberForName: [String:Int] = ["yagom":100, "chulsoo":200, "jenny":300] // 초깃값을 주어 생성해줄 수도 있습니다. print(numberForName.isEmpty) // false print(numberForName.count) // 3
print(numberForName["chulsoo"]) // 200 print(numberForName["minji"]) // nil numberForName["chulsoo"] = 150 print(numberForName["chulsoo"]) // 150 numberForName["max"] = 999 // max라는 키로 999라는 값을 추가해줍니다. print(numberForName["max"]) // 999 print(numberForName.removeValue(forKey: "yagom")) // 100 print(numberForName.removeValue(forKey: "yagom")) // nil // 위에서 yagom 키에 해당하는 값이 이미 삭제되었으므로 nil이 반환됩니다.
이번에 스위프트의 기초적인 형태의 함수와 컬렉션 데이터 타입에 대해 알아봤습니다. 다음 포스팅에서는 구조체와 클래스에 대해 알아보겠습니다.
다음 번에 또 뵈어요~ 고맙습니다 :D
- 본 글의 일부내용은 필자의 저서 [스위프트 프로그래밍](2017, 한빛미디어)(http://www.hanbit.co.kr/store/books/look.php?p_code=B5682208459)에서 요약, 발췌하였음을 알립니다.
- 스위프트의 문법에 대해 더 알아보고 싶다면 애플의 Swift Language Guide[https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html]를 참고해도 많은 도움이 됩니다.
by yagom
facebook : http://www.facebook.com/yagomSoft
facebook group : https://www.facebook.com/groups/yagom/
twitter : http://www.twitter.com/yagomSoft ( @yagomsoft )
p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.
RSS Feed 받기
'Swift > 기본문법' 카테고리의 다른 글
스위프트 시작하기 (0) | 2017.05.08 |
---|---|
Swift - 프로토콜, 익스텐션 (0) | 2017.03.07 |
Swift - 구조체 클래스 (0) | 2017.02.28 |
Swift 기초문법 - 변수, 상수, 기초 데이터 타입 (0) | 2017.01.25 |
Swift란 어떤 언어인가? (0) | 2017.01.23 |