이 글은 공부한 내용을 기반으로 정리하는 글입니다. 언제든 건전한 비판은 환영합니다.
상수와 변수
스위프트는 함수형 프로그래밍의 패러다임을 채용한 언어이므로 불변 객체를 굉장히 중요시 한다.
// 상수 선언
let 변수이름 : 타입 = 값
// 변수 선언
var 변수이름 : 타입 = 값
값이 명확하다면 타입 생략이 가능하지만, 나중에 값을 넣을 경우는 꼭 타입을 명시해줘야 한다.
//타입 생략
var number = 123
let str = "kor"
//값을 나중에 저장하기
var number : Int
let str : String
//값 저장
number = 123
str = "kor"
- 변수 데이터 vs 상수 데이터
변수는 변경 가능한 데이터지만 상수는 변경 불가한 데이터이다. 그래도 이해가 안간다면 예제를 들어보겠습니다.
- 변수
- 변수는 라벨을 붙인 열린 공간의 상자
-> 이게 무엇을 뜻하냐면 상자에다가 label을 붙이고 값을 넣어 준다. 넣어주고 난 후에도 상자는 열려있다. 왜냐하면 추가 할 수 있으며, 바뀔 수도 있기 때문에 상자는 열려있어야 한다.
- 상수
- 상수는 라벨을 붙인 봉인 공간의 상자
-> 이게 무엇을 뜻하냐면 label을 붙이고 값을 상자에 넣어주면 상자에다가 테이프를 붙여 값의 안정성을 보장하면서 바꾸지도 못 하게 상자를 봉인시킨다.
- 변수 데이터를 사용할 경우 vs 상수 데이터를 사용할 경우
- 변수 데이터는 유연성이 필요하다면 사용해야 하지만 큰 숫자를 저장할 경우 다음 컨테이너의 생성되는 상자가 불필요하게 커질 수 있습니다.
예를 들면
//이때 메모리는 3만큼 저장할 수 있게 할당이 된다.
var a: Int = 3
//여기서 다시 a변수에다가 값을 바꾼다면 할당한 만큼의 데이터 저장 공간이 늘어나게 된다
a = 567894123
//다시 3으로 저장한다면 위에 있었던 a만큼의 저장 컨테이너가 용량을 차지하지만 3만큼의 데이터가 저장이 된다
a = 3
이런 위에 것들을 변수의 미래의 유연성을 허용을 합니다.
- 상수는 단일 값으로 더 이상 변경이 필요 없다면 효율적이며 안전할 수 있습니다.
- 결론 : 더 이상 저장을 하지 않는다면 상수, 저장이 필요하다면 변수로 사용하면 됩니다.
기본 데이터 타입
스위프트는 데이터 타입에 엄격한 언어입니다. 서로 다른 데이터 타입 간의 자료 교환이 까다롭다.
- Bool
true와 false 값만을 가집니다
- Int, UInt
Int : 정수 타입, 64비트 정수형
UInt : 양의 정수 타입, 64비트 양의 정수형 ( 마이너스 값은 안된다.)
- Float, Double
Float : 실수 타입, 32비트 부동소수형
Double : 실수 타입, 64비트 부동소수형
- Character, String
Character: 문자 타입, 유니코드 사용, 큰따옴표("") 사용
String: 문자열 타입, 유니코드 사용, 큰따옴표("") 사용
Any, AnyObject, nil
Any
스위프트의 모든 타입을 지칭하는 키워드
AnyObject
모든 클래스 타입을 지칭하는 프로토콜
nil
스위프트에서 "없음"을 의미 하는 키워드
컬렉션 타입
- Array
순서를 가진 리스트 형태의 컬렉션 타입이다
1. Array 선언 및 생성
var strList:Array<String> = Array<String>()
var strList:Array<String> = [String]()
var strList:[String] = Array<String>()
var strList:[String] = [String]()
var strList:[String] = ()
var strList:[String]()
2. Array 활용
// 추가하기
strList.append("str")
strList.append("str1")
// 포함 여부 확인
strList.contains("str")//true
strList.contains("str2")//false
//값 교체하기
strList[0] = "str0"
//값 삭제하기
strList.remove(at:0)//str0삭제
strList.removeLast()//str2삭제
strList.removeAll()//전체 삭제
//갯수 확인하기
print(strList.count) // 0개
- 추가적인 리스트 활용
[apple, banana, kiwi][X] : X번째 태그를 지정합니다
-> 무작위 수 추가하고자 할때
- Int.random(in : 0...5) : int숫자로 0부터 5까지 무작위 수로 나온다
ex) [apple, banana, kiwi][Int.random(in : 0...3)]
- Dictionary
'키'와 '값'의 쌍으로 이루어진 컬렉션 타입
'키'와 '값'의 쌍으로 이루어진 컬렉션 타입. Array와 같이 여러가지 리터럴 문법을 활용할 수 있다.
1. Dictionary선언과 생성
var anyDictionary : Dictionary<String, Any> = [String : Any]()
var anyDictionary : Dictionary<String, Any> = Dictionary<String, Any>()
var anyDictionary : Dictionary<String, Any> = [:]
var anyDictionary : [String : Any] = Dictionary<String, Any>()
var anyDictionary : [String : Any] = [String : Any]()
var anyDictionary = [String : Any]()
2. Dictionary 활용
// 키에 해당하는 값 할당
anyDictionary["someKey"] = "someValue"
anyDictionary["anotherKey"] = 100
// 위와 동일한 표현
anyDictionary = ["someKey" : "someValue", "anotherKey" : 100]
// 키에 해당하는 값 변경
anyDictionary["someKey"] = "dictionary"
// 키에 해당하는 값 제거
anyDictionary.removeValue(forKey:"anotherKey")
anyDictionary["someKey"] = nil
Set
중복되지 않는 값들이 순서 없이 존재하는 컬렉션
1. Set 선언 및 생성
var strListSet : Set<String> = Set<String>()
2. Set 활용
//값 추가
strList.insert("str0")
strList.insert("str1")
strList.insert("str2")
strList.insert("str3")
strList.insert("str0")//중복을 허용하지 않기 때문에 저장X
//값 여부 확인
strList.contains("str0")//true
strList.contains("str99")//false
//값 삭제
strList.remove("str0")
strList.removeFirst()//첫 번째 값 삭제
//set 컬렉션 확인
print(strList.count)//3
중복을 허용하지 않기 때문에 집합 연산에 활용할 수 있다.
let setA : Set<Int> = [50,51,52,53,54]
let setB : Set<Int> = [53,54,55]
// 합집합
let union : Set<Int> = setA.union(setB)
// 오름차순 정렬
let orderedUnion : [Int] = union.sorted()
// 교집합
let intersection : Set<Int> = setA.intersection(setB)
// 차집합
let subtracting : Set<Int> = setA.subtracting(setB)
'Language > Swift' 카테고리의 다른 글
Closure (클로저) (0) | 2022.03.24 |
---|---|
클래스 vs 구조체 차이 (0) | 2022.02.19 |
클래스와 상속 (0) | 2022.02.19 |