본문 바로가기

학교 수업/ios 개발 공부

[swift] Any, nil, Array, Dictionary에 관하여

안녕하세요 소프트웨어 공부하는 레오존입니다.
swift에 나오는 Any, nil, Array, Dictionary에 대해 정리해 보도록 하겠습니다.
 

Any


Any는 모든 데이터 타입을 수용할 수 있는 키워드입니다.

var happytoday : Any = 100       //Any로 지정 -> 어떤 데이터 타입이든 가능
happytoday = "행복한 오늘"       
happytoday = -100.5

 

nil


nil은 없음을 의미하는 단어인데, 0을 의미하는 것이 아닌 그냥 값이 없다는 것을 뜻합니다.
또한, nil 값을 Any로 지정된 변수에 넣으면 오류가 발생합니다. 즉, 위의 예시를 참고해 얘기해 보면 Any로 데이터타입을 지정해 준 happyday이라는 변수에 nil값을 넣을 수 없다는 것입니다.
 


Array


 
Array는 배열이라는 의미를 가진 단어로, swift에선 순서가 있는 리스트 컬렉션입니다.

  • 빈 Array 생성하는 표현은 아래와 같습니다.
var nums: [Int] = [Int]()    //Array 표현 방법1
var nums: Array<Int> = Array<Int>  //Array 표현 방법2

     이 이외에도 아래와 같이 다양한 Array 생성 표현 방법이 존재합니다.

var nums: Array<Int> = [Int]()
var nums: Array<Int> = []
var nums: [Int] = Array<Int>()
var nums: [Int] = [Int]()
var nums: [Int] = []
var nums = [Int]()

 

  • Array 안에서 요소를 추가하고 싶을 때는 append를 사용하여 추가해줍니다.
nums.append(1)    //1이라는 값을 배열에 추가함, 0번째 순서로 들어감

      Int형으로 배열을 선언했으므로 Int형 값만 Array안에 요소로 추가할 수 있습니다.(다른 데이터 타입은 추가할 수 없음)
 

  • Array 안에 값이 포함되어 있는지 확인하고 싶을 때는 contains를 사용해 줍니다. true, false를 통해 해당 값이 Array안에 존재하는지 확인할 수 있습니다.
nums.contains(12)   //12가 포함되었는지 확인 , 현재 12가 포함되어 있지 않으므로 false

 

  • Array 안에 있는 멤버를 교체하고 싶을 때는 아래와 같은 표현을 사용합니다.
nums[0] = 99  //맨 첫번째 멤버를 99로 교체

 

  • Array 안에 들어 있는 멤버 수를 알고 싶을 때는 count를 사용하여 알 수 있습니다.
nums.count   //멤버 수 세기

print(nums.count)  //print 함수를 통해 화면에 출력하여 확인

 

  • Array 안에 있는 멤버를 삭제하고 싶을 때는 remove를 사용합니다.
nums.remove(at: 0)  //0번 인덱스에 있는 값을 삭제
nums.removeLast()   //맨 마지막 멤버를 삭제
nums.removeAll()    //모든 멤버 삭제

현재 remove를 통해 인텍스에 있는 모든 멤버가 삭제된 상황이기 때문에 인덱스 0번째 멤버를 꺼내라는 요청을 입력하면 오류가 발생하게 됩니다. 

nums[0]   // Array가 비어있는 상태에서 0번째 index에 접근하려하면 오류발생

 

  • let을 사용해  Array를 선언하게 되면 변경 불가능한 Array가 되므로 이후 멤버를 추가하거나 삭제할 수 없습니다. 상수를 선언할 때 let을 사용하고, 변수를 선언할 때 var을 사용하기 때문입니다.
let sampleArray = [1, 2, 3]  //수정이 불가능한 Array

// 수정이 불가능한 Array이므로 멤버를 추가하거나 삭제할 수 없습니다.
//sampleArray.append(4)   //불가능(오류)
//sampleArray.removeAll()    //불가능(오류)

 


 

Dictionary


Dictionary는 키와 값의 쌍으로 이루어진 컬렉션입니다. 말만 들으면 잘 이해가 잘 안 되기 때문에 코드를 같이 보면서 이해하면 좀 더 쉽게 이해할 수 있습니다.

  • 빈 Dictionary를 선언하는 방법은 아래와 같습니다.
var firstDictionary: Dictionary<String, Any> = [String: Any]() 
// Key가 String 타입이고 Value가 Any인 빈 Dictionary 생성 
// 즉, 형태가 Dictionary<키 데이터 타입, 값 데이터 타입> = [키 데이터 타입: 값 데이터 타입]()

      Dictionary 또한 Array와 마찬가지로 선언하는 방법이 다양합니다. 아래 코드는 위에 선언한 Dictionary와 같은 표현들입니다.

var firstDictionary: Dictionary <String, Any> = Dictionary<String, Any>()
var firstDictionary: Dictionary <String, Any> = [:]
var firstDictionary: [String: Any] = Dictionary<String, Any>()
var firstDictionary: [String: Any] = [String: Any]()
var firstDictionary: [String: Any] = [:]
var firstDictionary = [String: Any]()

 

  • Dictionary에서 키에 해당하는 값을 할당하는 표현은 아래와 같습니다.
firstDictionary["softwareKey"] = "workhard"  //softwareKey라는 키에 workhard라는 값 할당
firstDictionary["scoreKey"] = 100   //scoreKey라는 키에 100이라는 값 할당

print(firstDictionary)    // 출력결과는 아래와 같습니다.
//["softwareKey": "workhard", "scoreKey": 100]

 

  • Dictionary에서 키에 해당하는 값을 변경할 수 있습니다.
firstDictionary[“softwareKey”] = “always”
print(anyDictionary) // 아래와 같이 출력됩니다.
// ["softwareKey": "always", "scoreKey”: 100]

 

  • Dictionary에서 키에 해당하는 값을 제거할 수도 있습니다. 아래와 같은 표현들을 사용하여 Dictionary의 키에 해당하는 값을 제거할 수 있습니다.
firstDictionary.removeValue(forKey: "scoreKey")
firstDictionary["softwareKey"] = nil
print(firstDictionary)

 

  • Dictionary 또한 let을 사용하여 변경이 불가능한 Dictionary를 만들 수 있습니다. 변경이 불가능하기 때문에 다른 값으로 값을 변경하려고 하면 오류가 발생합니다.
//let으로 Dictionary를 선언해서 dictionary 값 변경불가
let emptyDictionary: [String: String] = [:]  //빈 Dictionary 선언
let thesedayDictionary: [String: String] = ["food": "nugacracker", "kiler": "leozone"] //빈 딕셔너리에 값 넣어주기

// emptyDictionary["go"] = "school"   // 불변 Dictionary이므로 값 변경 불가(오류)

 

  • 아래와 같은 상황에서도 오류가 발생할 수 있습니다. thesedayDictionary의 값을 someValue에 넣어주고 싶을 때 '키'와 '값' 모두 String 타입(위에서 thesedayDictionary 키와 값 모두 String으로 선언)이므로 someValue에 값이 들어갈 수 있지 않을까 생각하기 쉽습니다. 하지만 키인 food에 해당하는 값이 없을 수도 있기 때문에 오류가 발생하게 됩니다. 이는 불확실성 때문에 발생하는 오류입니다.
// let someValue: String = thesedayDictionary["food"] // 오류 발생

 


 
이 포스팅은 야곰님의 ios 프로그래밍을 위한 스위프트 기초 강의를 듣고 정리한 내용입니다.
 
야곰님의 ios프로그래밍을 위한 스위프트 기초 강의 바로가기
https://www.boostcourse.org/mo122/joinLectures/38564

iOS 프로그래밍을 위한 스위프트 기초

부스트코스 무료 강의

www.boostcourse.org