Deep_Dev
article thumbnail

 

πŸ“– 데이터 νƒ€μž… μ•ˆμ‹¬

μŠ€μœ„ν”„νŠΈλŠ” νƒ€μž…μ— ꡉμž₯히 λ―Όκ°ν•˜κ³  μ—„κ²©ν•˜λ‹€.

μ„œλ‘œ λ‹€λ₯Έ 데이터 νƒ€μž… 끼리의 데이터 κ΅ν™˜μ€ νƒ€μž…μΊμŠ€νŒ…(Type-Casting)을 거쳐야 ν•œλ‹€.

 

μŠ€μœ„ν”„νŠΈμ—μ„œ κ°’ νƒ€μž…μ˜ 데이터 κ΅ν™˜μ€ μ—„λ°€νžˆ λ§ν•˜λ©΄ νƒ€μž…μΊμŠ€νŒ…μ΄ μ•„λ‹Œ μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ—¬ ν• λ‹Ήν•˜λŠ” 것이닀.

 

πŸ“Œ 데이터 νƒ€μž… μ•ˆμ‹¬μ΄λž€

μŠ€μœ„ν”„νŠΈλŠ” 데이터 νƒ€μž…μ„ μ•ˆμ‹¬ν•˜κ³  μ‚¬μš©ν•  수 μžˆλŠ” 언어이닀.

예λ₯Ό λ“€μ–΄, Int νƒ€μž… λ³€μˆ˜μ— ν• λ‹Ήν•˜λ €λŠ” 값이 Character νƒ€μž…μ΄λ©΄ 컴파일 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

μ΄λ ‡κ²Œ μŠ€μœ„ν”„νŠΈκ°€ 컴파일 μ‹œ νƒ€μž…μ„ ν™•μΈν•˜λŠ” 것을 νƒ€μž…ν™•μΈ 이라고 ν•œλ‹€.

 

πŸ“Œ νƒ€μž… μΆ”λ‘ 

μŠ€μœ„ν”„νŠΈμ—μ„œλŠ” λ³€μˆ˜λ‚˜ μƒμˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ νŠΉμ • νƒ€μž…μ„ λͺ…μ‹œν•˜μ§€ μ•Šμ•„λ„

μ»΄νŒŒμΌλŸ¬κ°€ ν• λ‹Ήλœ 값을 κΈ°μ€€μœΌλ‘œ λ³€μˆ˜λ‚˜ μƒμˆ˜μ˜ νƒ€μž…μ„ κ²°μ •ν•œλ‹€.

// νƒ€μž…μ„ μ§€μ •ν•˜μ§€ μ•Šμ•˜μœΌλ‚˜ νƒ€μž… 좔둠을 ν†΅ν•˜μ—¬ name은 String νƒ€μž…μœΌλ‘œ μ„ μ–Έλœλ‹€.
var name = "Kwanhee"

// μ•žμ„œ νƒ€μž… 좔둠에 μ˜ν•΄ name은 String νƒ€μž…μ˜ λ³€μˆ˜λ‘œ μ§€μ •λ˜μ—ˆκΈ° λ•Œλ¬Έμ—
// 점수λ₯Ό ν• λ‹Ήν•˜λ €κ³  μ‹œλ„ν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•œλ‹€. 
name = 100 // 였λ₯˜

 

πŸ“– 데이터 νƒ€μž… κ³ κΈ‰

πŸ“Œ νŠœν”Œ

 νŠœν”Œμ€ 이름이 λ”°λ‘œ μ§€μ •λ˜μ–΄ μžˆμ§€ μ•Šμ€, ν”„λ‘œκ·Έλž˜λ¨Έ λ§ˆμŒλŒ€λ‘œ λ§Œλ“œλŠ” νƒ€μž…μ΄λ‹€.

'μ €μž₯된 λ°μ΄ν„°μ˜ 묢음'이라고 ν•  수 μžˆλ‹€. ( Cμ–Έμ–΄μ˜ μ›μ‹œ ꡬ쑰체의 ν˜•νƒœμ™€ 가깝고, 파이썬의 νŠœν”Œκ³Ό μœ μ‚¬ν•˜λ‹€ )

// String, Int, Double νƒ€μž…μ„ κ°–λŠ” νŠœν”Œ
var person: (String, Int, Double) = ("yagom", 100, 182,5)

// 인덱슀λ₯Ό ν†΅ν•΄μ„œ 값을 빼올 수 μžˆλ‹€.
print("이름: \(person.0) λ‚˜μ΄:\(person.1) μ‹ μž₯:\(person.2)")

// 인덱슀λ₯Ό ν†΅ν•΄μ„œ 값을 ν• λ‹Ή ν•  수 μžˆλ‹€.
person.1=99
person.2=178.5

 

πŸ“Œ μ»¬λ ‰μ…˜ν˜•

πŸ’‘ λ°°μ—΄

λ°°μ—΄μ˜ μ„ μ–Έκ³Ό 생성

// λŒ€κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°°μ—΄μž„μ„ ν‘œν˜„ν•©λ‹ˆλ‹€.
var names: Array<String> = ["yagom", "chulsoo", "younghee", "yagom"]

// μœ„ μ„ μ–Έκ³Ό λ™μΌν•œ ν‘œν˜„. [String]은 Array<String>의 μΆ•μ•½ν‘œν˜„
var names: [String] = ["yagom", "chulsoo", "younghee", "yagom"]

var emptyArray: [Any] = [Any]() // Any 데이터λ₯Ό μš”μ†Œλ‘œ κ°–λŠ” 빈 λ°°μ—΄ 생성
var emptyArray: [Any] = Array<Any>() // μœ„ μ„ μ–Έκ³Ό μ •ν™•νžˆ 같은 λ™μž‘μ„ ν•˜λŠ” μ½”λ“œ

// λ°°μ—΄μ˜ νƒ€μž…μ„ λͺ…μ‹œν•΄μ€¬λ‹€λ©΄ []λ§ŒμœΌλ‘œλ„ 빈 배열을 생성할 수 μžˆλ‹€.
var emptyArray: [Any] = []
print(emptyArray.isEmpty) // true
print(names.count) // 4

맨 처음과 맨 λ§ˆμ§€λ§‰ μš”μ†ŒλŠ” first와 last ν”„λ‘œνΌν‹°λ₯Ό 톡해 κ°€μ Έμ˜¬ 수 μžˆλ‹€.

firstIndex(of:) : ν•΄λ‹Ή μš”μ†Œμ˜ 인덱슀λ₯Ό μ•Œμ•„λ‚Ό 수 μžˆλ‹€. ( μ€‘λ³΅λœ μš”μ†Œκ°€ μžˆλ‹€λ©΄ 제일 λ¨Όμ € 발견된 μš”μ†Œμ˜ 인덱슀 )

append(_ : ) : 맨 뒀에 μš”μ†Œ μΆ”κ°€

insert(_:at: ) : 쀑간에 μš”μ†Œμ‚½μž…

remove(_ :) : μš”μ†Œ μ‚­μ œ ( μ‚­μ œλœ ν›„ λ°˜ν™˜λœλ‹€ )

 

πŸ’‘ λ”•μ…”λ„ˆλ¦¬

λ”•μ…”λ„ˆλ¦¬λŠ” μš”μ†Œλ“€μ΄ μˆœμ„œμ—†μ΄ <Key,Value> 쌍으둜 κ΅¬μ„±λ˜λŠ” μ»¬λ ‰μ…˜ νƒ€μž…μ΄λ‹€.

ν‚€λŠ” 쀑볡될 수 μ—†μœΌλ―€λ‘œ, ν‚€λŠ” 값을 λŒ€λ³€ν•˜λŠ” μœ μΌν•œ μ‹λ³„μž

 

πŸ’‘ μ„ΈνŠΈ

μ„ΈνŠΈλŠ” 같은 νƒ€μž…μ˜ 데이터λ₯Ό μˆœμ„œ 없이 ν•˜λ‚˜μ˜ 묢음으둜 μ €μž₯ν•˜λŠ” μ»¬λ ‰μ…˜ νƒ€μž…μ΄λ‹€.

- μ„ΈνŠΈ λ‚΄μ˜ 값은 λͺ¨λ‘ μœ μΌν•œ κ°’, 즉 μ€‘λ³΅λœ 값이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

- μˆœμ„œκ°€ μ€‘μš”ν•˜μ§€ μ•Šκ±°λ‚˜, 각 μš”μ†Œκ°€ μœ μΌν•œ 값이어야 ν•˜λŠ” κ²½μš°μ— μ‚¬μš©

- ν•΄μ‹œ κ°€λŠ₯ν•œ 값이 듀어와야 ν•œλ‹€.

 

Setν‚€μ›Œλ“œμ™€ νƒ€μž…μ΄λ¦„μ˜ μ‘°ν•©μœΌλ‘œ 써쀀닀. λ°°μ—΄κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ λŒ€κ΄„ν˜Έλ‘œ 값듀을 λ¬Άμ–΄ μ„ΈνŠΈ νƒ€μž…μž„μ„ ν‘œν˜„ν•œλ‹€.

λ°°μ—΄κ³Ό 달리 Array<Int>λ₯Ό [Int]둜 μΆ•μ•½ν•  수 μžˆλŠ”κ²Œ μ—†λ‹€. 

  • let μ„ μ–Έ -> λ³€κ²½ λΆˆκ°€λŠ₯ν•œ μ„ΈνŠΈ
  • var μ„ μ–Έ -> λ³€κ²½ κ°€λŠ₯ν•œ μ„ΈνŠΈ

 

μ„ΈνŠΈμ˜ μ„ μ–Έκ³Ό 생성

var names: Set<String> = Set<String>() // 빈 μ„ΈνŠΈ 생성
var names: Set<String> =			   // 빈 μ„ΈνŠΈ 생성

// Array와 λ§ˆμ°¬κ°€μ§€λ‘œ λŒ€κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•œλ‹€.
var names: Set<String> = ["yagom", "chulsoo", "younghee", "yagom"]

// κ·Έλ ‡κΈ° λ•Œλ¬Έμ— νƒ€μž… 좔둠을 μ‚¬μš©ν•˜κ²Œ 되면 μ»΄νŒŒμΌλŸ¬λŠ” Setκ°€ μ•„λ‹Œ Array둜 νƒ€μž…μ„ μ§€μ •ν•œλ‹€.
var numbers = [100, 200, 300]
print(type(of: numbers)) // Array<Int>

print(names.isEmpty) // false
print(names.count) // 3 -> ( μ€‘λ³΅λœ 값은 ν—ˆμš©ν•˜μ§€ μ•Šμ•„ yagom은 1개 )

 

πŸ“Œ μ—΄κ±°ν˜•

μ—°κ΄€λœ ν•­λͺ©λ“€μ„ λ¬Άμ–΄μ„œ ν‘œν˜„ν•  수 μžˆλŠ” νƒ€μž…μ΄λ‹€.

λ°°μ—΄μ΄λ‚˜ λ”•μ…”λ„ˆλ¦¬ 같은 νƒ€μž…κ³Ό λ‹€λ₯΄κ²Œ μ •μ˜ν•΄μ€€ ν•­λͺ© κ°’ μ™Έμ—λŠ” μΆ”κ°€/μˆ˜μ •μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€.

  • μ œν•œλœ 선택지λ₯Ό μ£Όκ³  싢을 λ•Œ
  • 정해진 κ°’ μ™Έμ—λŠ” μž…λ ₯λ°›κ³  싢지 μ•Šμ„ λ•Œ
  • μ˜ˆμƒλœ μž…λ ₯ 값이 ν•œμ •λ˜μ–΄ μžˆμ„ λ•Œ

μ˜ˆμ‹œ

  • 무선톡신방식 : WiFi, λΈ”λ£¨νˆ¬μŠ€, LTE, 3
  • 학생 : μ΄ˆλ“±ν•™μƒ, 쀑학생, 고등학생, λŒ€ν•™μƒ, λŒ€ν•™μ›μƒ
  • 지역 : 강원도, 경기도, 경상도, 전라도, μ œμ£Όλ„, 좩청도

πŸ’‘ κΈ°λ³Έ μ—΄κ±°ν˜•

κΈ°λ³Έ μ—΄κ±°ν˜•μ€ enum μ΄λΌλŠ” ν‚€μ›Œλ“œλ‘œ μ„ μ–Έ

enum School{
	case primary
    case elementary
    case middle
    case high
    case university
    case graduate
}

enum School{
	case primary, elementary, middle, high, university, graduate
}

// Scool μ—΄κ±°ν˜• λ³€μˆ˜μ˜ μƒμ„±μ˜ 생성 및 κ°’ λ³€κ²½
var highestEducationLevel: School = School.university

// μœ„ μ½”λ“œμ™€ μ •ν™•νžˆ 같은 ν‘œν˜„
var highestEducationLevel: School = .university

// 같은 νƒ€μž…μΈ School λ‚΄λΆ€μ˜ ν•­λͺ©μœΌλ‘œλ§Œ highestEducationLevel의 값을 변경해쀄 수 μžˆλ‹€.
highestEducationLvel = . graduate

 

πŸ’‘ μ›μ‹œ κ°’

μ—΄κ±°ν˜•μ˜ 각 ν•­λͺ©μ€ μžμ²΄λ‘œλ„ ν•˜λ‚˜μ˜ κ°’μ΄μ§€λ§Œ ν•­λͺ©μ˜ μ›μ‹œ(Raw Value)도 κ°€μ§ˆ 수 μžˆλ‹€.

즉, νŠΉμ • νƒ€μž…μœΌλ‘œ μ§€μ •λœ 값을 κ°€μ§ˆ 수 μžˆλ‹€λŠ” 것이닀. 

 

νŠΉμ • νƒ€μž…μ˜ 값을 μ›μ‹œ κ°’μœΌλ‘œ 가지고 μ‹Άλ‹€λ©΄ μ—΄κ±°ν˜• 이름 였λ₯Έμͺ½μ— νƒ€μž…μ„ λͺ…μ‹œν•΄μ£Όλ©΄ λœλ‹€. 

또 μ›μ‹œκ°’μ„ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ rawValueλΌλŠ” ν”„λ‘œνΌν‹°λ₯Ό 톡해 κ°€μ Έμ˜¬ 수 μžˆλ‹€.

enum School{
	case primary = "μœ μΉ˜μ›"
    case elementary = "μ΄ˆλ“±ν•™κ΅"
    case middle = "쀑학ꡐ"
    case high = "고등학ꡐ"
    case university = "λŒ€ν•™κ΅"
    case graduate = "λŒ€ν•™μ›"
}

let highestEducationLevel: School = School.university
print("μ €μ˜ μ΅œμ’…ν•™λ ₯은 \(highestEducationLevel.rawValue) μ‘Έμ—…μž…λ‹ˆλ‹€.")
// μ €μ˜ μ΅œμ’…ν•™λ ₯은 λŒ€ν•™κ΅ μ‘Έμ—…μž…λ‹ˆλ‹€.

enum WeekDays: Character {
	case mon="μ›”", tue="ν™”", wed="수", thu="λͺ©", fri="금", sat="ν† ", sun="일"
}

let today: WeekDays = WeekDays.fri
print("μ˜€λŠ˜μ€ \(today.rawValue)μš”μΌ μž…λ‹ˆλ‹€.")
// μ˜€λŠ˜μ€ κΈˆμš”μΌμž…λ‹ˆλ‹€.

 

πŸ’‘ μ—°κ΄€ κ°’

μŠ€μœ„ν”„νŠΈμ˜ μ—΄κ±°ν˜• 각 ν•­λͺ©μ΄ μ—°κ΄€ 값을 κ°€μ§€κ²Œ 되면, κΈ°μ€€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ 곡용체 ν˜•νƒœλ₯Ό λ›Έ μˆ˜λ„ μžˆλ‹€.

 

πŸ’‘ ν•­λͺ© 순회

λ•Œλ•Œλ‘œ μ—΄κ±°ν˜•μ— ν¬ν•¨λœ λͺ¨λ“  μΌ€μ΄μŠ€λ₯Ό μ•Œμ•„μ•Ό ν•  λ•Œκ°€ μžˆλ‹€. 

그럴 λ•Œ μ—΄κ±°ν˜•μ˜ 이름 뒀에 콜둠(:)을 μž‘μ„±ν•˜κ³  ν•œ μΉΈ λ„μš΄ λ’€ CaseIterable ν”„λ‘œν† μ½œ μ‚¬μš©.

 

πŸ’‘ μˆœν™˜ μ—΄κ±°ν˜•

μˆœν™˜ μ—΄κ±°ν˜•μ€ μ—΄κ±°ν˜• ν•­λͺ©μ˜ μ—°κ΄€ 값이 μ—΄κ±°ν˜• μžμ‹ μ˜ κ°’μ΄κ³ μž ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

μˆœν™˜ μ—΄κ±°ν˜•μ„ λͺ…μ‹œν•˜κ³  μ‹Άλ‹€λ©΄ indirect ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

( νŠΉμ • ν•­λͺ©μ—λ§Œ ν•œμ •ν•˜κ³  μ‹Άλ‹€λ©΄ -> case ν‚€μ›Œλ“œ μ•žμ— indirect )

( μ—΄κ±°ν˜• 전체에 μ μš©ν•˜κ³  μ‹Άλ‹€λ©΄ -> enum ν‚€μ›Œλ“œ μ•žμ— indirect )

 

πŸ’‘ 비ꡐ κ°€λŠ₯ν•œ μ—΄κ±°ν˜•

Comparacble ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜λŠ” μ—°κ΄€ κ°’λ§Œ κ°–κ±°λ‚˜ μ—°κ΄€ 값이 μ—†λŠ” μ—΄κ±°ν˜•μ€ Comparable ν”„λ‘œν† μ½œμ„ μ±„νƒν•˜λ©΄

각 μΌ€μ΄μŠ€λ₯Ό 비ꡐ할 수 μžˆλ‹€. μ•žμ— μœ„μΉ˜ν•œ μΌ€μ΄μŠ€κ°€ 더 μž‘μ€ 값이 λœλ‹€.