본문 바로가기

Language/Swift

Swift 기본 문법 - 자료형

이 글은 공부한 내용을 기반으로 정리하는 글입니다. 언제든 건전한 비판은 환영합니다.

 

상수와 변수

스위프트는 함수형 프로그래밍의 패러다임을 채용한 언어이므로 불변 객체를 굉장히 중요시 한다.

 

// 상수 선언
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