2021. 1. 8. 14:36ใ๐ง๐ป๐ป iOS ๊ฐ๋ฐ/Swift
ํด๋น ๊ธ์ ์ผ๊ณฐ๋์ ์ค์ํํธ ๊ฐ์์ ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
์ค๋งํธํฐ์ผ๋ก 15๋ ๊ฐ ์ฐ์ ์ํ๊ณ๊ฐ ์์ง์๋ค๋ฉด ๋ค์์ ์ค๋งํธ ์๋์ฐจ๊ฐ ์๋๊น์? ์ฌ๋์ด ์ด์ ์ ํ๋ ์๋๋ ๊ณง ์ฌ๋ผ์ง ๊ฒ์ ๋๋ค. ์ฐจ์ ํ์ ์ด๋ํ๋ ๋์ ์ฌ๋๋ค์ด ์ ๋ง ์ ๊น์? ์ ํ์นด๊ฐ ๋ฑ์ฅํ๋ค๋ฉด ๊ทธ ์์์ ์๋น๋๋ ๋ชจ๋ ์ปจํ ์ธ ์ ํ๋ซํผ์ ์ ํ์ ๊ฐ๋ฐ ์ธ์ด์ธ Swift๋ก ์์ฑ๋ ํ๋ฅ ์ด ๊ต์ฅํ ๋์ต๋๋ค. ๊ทธ๋ผ ๊ฐ์ด ๊ณต๋ถํด๋ด ์๋ค!
Swift์๋ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ด์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ์ปฌ๋ ์ ํ์ ์ ์ ๊ณตํฉ๋๋ค. ์ปฌ๋ ์ ํ์ ์๋ Array (๋ฐฐ์ด), Dictionary (๋์ ๋๋ฆฌ), Set (์ธํธ)๊ฐ ์กด์ฌํฉ๋๋ค.
์ ๋ฒ ํฌ์คํ ์์ ์ปฌ๋ ์ ํ์ ์ธ Dictionary๋ฅผ ๋ค๋ค๋ค๋ฉด ์ด๋ฒ์๋ Set ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
1. Set ์ ํน์ง
์ธํธ๋ ๊ฐ์ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์์ ์์ด ํ๋์ ๋ฌถ์์ผ๋ก ์ ์ฅํ๋ ํํ์ ์ปฌ๋ ์ ํ์ ์ ๋๋ค. ์คํ๊ต ๋ ๋ฐฐ์ ๋ ์งํฉ์ด๋ ๊ฑฐ์ ์ ์ฌํฉ๋๋ค. ๊ทธ ๋์ ์ธํธ ๋ด์ ๊ฐ์ ๋ชจ๋ ์ ์ผํ ๊ฐ์ผ๋ก, ์ค๋ณต๋ ๊ฐ์ด ์กด์ฌํ์ง ์๋ ๊ฒ์ด ํน์ง์ ๋๋ค. ์ธํธ์ ์์๋ก๋ ํด์ ๊ฐ๋ฅํ ๊ฐ์ด ์์ผ ํฉ๋๋ค. ํด์ ๊ฐ๋ฅํ ๊ฐ์ด๋ Swift ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Hashable Protocol ๋ฐ๋ฅธ ๋ค๋ ๊ฒ์ ์๋ฏธํ๊ณ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ ์ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฐ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
2. Set ํ์ ์ ์ ์ธ
var [์ธํธ ์ด๋ฆ]: Set<ํ์ > = Set<ํ์ >() ์ ๊ธฐ๋ณธ ํํ๋ฅผ ๊ฐ์ง๋๋ค. Set๋ ๋ค๋ฅธ ์ปฌ๋ ์ ํ์ ์ธ Array์ Dictionary์ฒ๋ผ ์ฌ๋ฌ ๋์ผ ํํ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋น ์ธํธ๋ฅผ ์์ฑํ ์๋ ์๊ณ Array ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ์ฌ ์์ฑ๊ณผ ๋์์ ์ด๊ธฐํ๋ ๊ฐ๋ฅํฉ๋๋ค.
// Set ์ ์ธ
var country: Set<String> = Set<String>()
let companies: Set<String> = ["samsung","kakao","naver","apple","google"]
let ํค์๋๋ฅผ ์ฌ์ฉํด์ ์ถ๊ฐ, ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅํ ์ธํธ๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค.
3. Set ํ์ ์ ํ๋กํผํฐ์ ๋ฉ์๋
- isEmpty : ๋น์ด์๋ ์ธํธ์ธ์ง ์๋์ง Bool ํ์
์ ๋ฐํํฉ๋๋ค.
- count : ์ธํธ์ ๋ช ๊ฐ์ ์์๊ฐ ์๋์ง ์ ์ ์์ต๋๋ค.
- insert( ): ์ธํธ์ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- remove( ): ์ธํธ์์ ํด๋น ์์๋ฅผ ์ญ์ ํ๊ณ ๊ทธ ๊ฐ์ ๋ฐํํฉ๋๋ค. removeAll( )์ ๋ชจ๋ ์์๋ฅผ ์ญ์ ํฉ๋๋ค.
- contains( ): ์ธํธ์์ ํด๋น์์๊ฐ ์๋ค๋ฉด true , ์๋ค๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
- sorted( ): ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค. ๋ฐฐ์ด์ ๋ฐํํ๋ ๊ฒ์ ์ ์ํ์๊ธธ ๋ฐ๋๋๋ค.
var country: Set<String> = Set<String>()
let companies: Set<String> = ["samsung","kakao","naver","apple","google"]
country.insert("korea")
print(companies.count) // 5
print(companies.contains("lg")) // false
print(country.isEmpty) // false
print(companies.sorted()) // ["apple", "google", "kakao", "naver", "samsung"]
4. Set ์ ์งํฉ ๊ด๊ณ ํํ ๋ฉ์๋
์ธํธ๋ ์์ ๋ด๋ถ์ ๊ฐ๋ค์ด ๋ชจ๋ ์ ์ผํ๋ฏ๋ก ์งํฉ ๊ด๊ณ๋ฅผ ํํํ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์ธํธ ๊ฐ์ ํฉ์งํฉ, ๊ต์งํฉ, ๋ฐฐํ์ ๋ ผ๋ฆฌํฉ, ์ฐจ์งํฉ ๋ฑ์ ๊ตฌํ๋ ๋ฉ์๋๊ฐ ์ ๊ตฌํ๋์ด์์ต๋๋ค.
- union( ) : ๋ ์ธํธ๊ฐ์ ํฉ์งํฉ์ ๋ฐํํฉ๋๋ค.
- symmetricDifference( ) : ๋ ์ธํธ๊ฐ์ ๋ฐฐํ์ ๋
ผ๋ฆฌํฉ์ ๊ตฌํฉ๋๋ค.
- substacting( ) : ์ฐจ์งํฉ
- intersection( ) : ๊ต์งํฉ
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersection(evenDigits).sorted()
// []
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]
- isSubset(of: ) : A.isSubset(of: B) A๊ฐ B์ ํฌํจ๋๋ ์งํฉ์ธ์ง Bool ํ์
์ผ๋ก ๋ฐํํฉ๋๋ค.
- isSuperset(of: ) : A.isSuperset(of: B) A ๊ฐ B๋ฅผ ํฌํจํ๋ ์งํฉ์ธ์ง Bool ํ์
์ผ๋ก ๋ฐํํฉ๋๋ค.
let houseAnimals: Set = ["๐ถ", "๐ฑ"]
let farmAnimals: Set = ["๐ฎ", "๐", "๐", "๐ถ", "๐ฑ"]
let cityAnimals: Set = ["๐ฆ", "๐ญ"]
houseAnimals.isSubset(of: farmAnimals)
// true
farmAnimals.isSuperset(of: houseAnimals)
// true
farmAnimals.isDisjoint(with: cityAnimals)
// true
5. ๋ง๋ฌด๋ฆฌ
์ด๋ฒ ํฌ์คํ ์์ ์ปฌ๋ ์ ์ ๋ง์ง๋ง ํ์ ์ธ Set์ ๋ํด์ ์์๋ณด์์ต๋๋ค. ์ค๋ ์ ํ๊ณผ ํ๋๊ฐ ํฉ์ํ์ฌ ์ ํ์นด๋ฅผ ๋ง๋ ๋ค๋ ๊ธฐ์ฌ๊ฐ ๋์์ต๋๋ค. ํ๋์ฐจ ์ฃผ๊ฐ๊ฐ ๋ฏธ์น ๋ฏ์ด ์น์๋ค์.. ๋ฏธ๋๋ฅผ ์ ํํ๊ฒ ์์ธกํ ์ ์์ง๋ง Lidar ์ผ์๋ฅผ ๋ฌ๊ณ ๋์ฌ ์ ํ ๊ธ๋์ค๋ ์ด๋ฒ์ ์ ํ์นด์ฒ๋ผ ๋ค์ 20๋ ์ ์ด๋์ด๊ฐ ์ํ๊ณ๊ฐ ๋ค๊ฐ์ค๊ธฐ ์ ์ ๋จผ์ ๊ณต๋ถํ๊ณ ์์ง์ฌ์ผ 30, 40๋์๋ ๊ฒฝ์๋ ฅ์ ๊ฐ์ง ์ ์์ง ์๊ฒ ๋ ์๊ฐํด๋ด ๋๋ค. ๊ณ์ AR/VR ํ๋ซํผ ๊ฐ๋ฐ๊ณผ ๋ฌด์ธ์๋์ฐจ ์ํํธ์จ์ด ํ๋ซํผ์ ๋ํด์ ๊ท๋ฅผ ๊ธฐ์ธ์ด๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
์ฐธ์กฐ: ์ ํ API ๊ฐ์ด๋ ๋ผ์ธ , ์ ํ ๊ณต์ ๊ฐ๋ฐ ๋ฌธ์ , Swift 5 ํ๋ก๊ทธ๋๋ฐ/ ์ง์์ด ์ผ๊ณฐ