λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🍏 Today I Learned/Swift 문법

[Swift] νƒ€μž… μΊμŠ€νŒ…

by Joseph Seong 2023. 12. 11.

 

 

νƒ€μž… μΊμŠ€νŒ…

 

is

 

  • is μ—°μ‚°μžλŠ” νƒ€μž…μ„ μ²΄ν¬ν•˜λŠ” μ—°μ‚°μžλ‘œ, 비ꡐ κ²°κ³Όλ₯Ό bool νƒ€μž…μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.(νƒ€μž… 체킹)
let char: Character = "A"
 
print(char is Character)
// 좜λ ₯κ°’: true
print(char is String)   
// 좜λ ₯κ°’: false
 
let bool: Bool = true

print(bool is Bool)     
// 좜λ ₯κ°’: true
print(bool is Character)
// 좜λ ₯κ°’: false

 

as, as?, as!

 

πŸ’‘ νƒ€μž… μΊμŠ€νŒ…

  • μΈμŠ€ν„΄μŠ€μ˜ "νƒ€μž…"을 확인 ν•˜κ±°λ‚˜, ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€λ₯Ό 슈퍼 클래슀(λΆ€λͺ¨ 클래슀)λ‚˜ ν•˜μœ„ 클래슀(μžμ‹ 클래슀)둜 μ·¨κΈ‰ν•˜λŠ” 방법

 

클래슀의 상속

// Person은 슈퍼 클래슀(λΆ€λͺ¨ 클래슀)
class Person {

}

// StudentλŠ” μ„œλΈŒ 클래슀(μžμ‹ 클래슀) - 상속받은 클래슀
class Student: Person {

}

// TeacherλŠ” μ„œλΈŒ 클래슀(μžμ‹ 클래슀) - 상속받은 클래슀
class Teacher: Person {

}

// λΆ€λͺ¨μ˜ μΈμŠ€ν„΄μŠ€λŠ” μžμ‹μ˜ νƒ€μž…μ„ κ°€μ§ˆ 수 μ—†λ‹€.
// μΈμŠ€ν„΄μŠ€μ™€ νƒ€μž…μ€ λ³„κ°œλ‘œ κ°€μ Έκ°ˆ 수 μžˆλ‹€.
let person: Person = Person() - κ°€λŠ₯
let person: Student = Person() - λΆˆκ°€λŠ₯
let person: Teacher = Person() - λΆˆκ°€λŠ₯
let student: Person = Student() - κ°€λŠ₯
let student: Student = Student() - κ°€λŠ₯
let student: Teacher = Student() - λΆˆκ°€λŠ₯
let teacher: Person = Teacher() - κ°€λŠ₯
let teacher: Student = Teacher() - λΆˆκ°€λŠ₯
let teacher: Teacher = Teacher() - κ°€λŠ₯

 

 

as - μ—…μΊμŠ€νŒ…(μžμ‹ νƒ€μž…μœΌλ‘œ λ˜μ–΄μžˆλŠ” 것을 λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ λŒμ–΄μ˜¬λ¦¬λŠ” 것)

 

  • as μ—°μ‚°μžλŠ” 컴파일 λ‹¨κ³„μ—μ„œ μΊμŠ€νŒ…μ΄ μ‹€ν–‰λœλ‹€.
  • λ”°λΌμ„œ 항상 νƒ€μž… μΊμŠ€νŒ…μ΄ 성곡할 κ²½μš°μ—λ§Œ μ‚¬μš©ν•  수 μžˆλ‹€.
  • μΊμŠ€νŒ…μ— μ‹€νŒ¨ν•  경우 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.
  • μΊμŠ€νŒ…ν•˜λ €λŠ” νƒ€μž…μ΄ 같은 νƒ€μž… μ΄κ±°λ‚˜ 수퍼클래슀 νƒ€μž…μ΄λΌλŠ” 것을 μ•Œ λ•Œ as μ—°μ‚¬μžλ₯Ό μ‚¬μš©ν•œλ‹€.

as? λ‹€μš΄μΊμŠ€νŒ…(λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ λ˜μ–΄μžˆλŠ” 것을 μžμ‹ νƒ€μž…μœΌλ‘œ λ‚΄λ¦¬λŠ” 것)

 

  • as? μ—°μ‚°μžλŠ” λŸ°νƒ€μž„μ— μΊμŠ€νŒ…μ΄ μ‹€ν–‰λœλ‹€.
  • μ„±κ³΅ν•˜λ©΄ μ˜΅μ…”λ„ νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ν•˜κ³  μ‹€νŒ¨ν•˜λ©΄ nil 을 λ°˜ν™˜ν•œλ‹€.
  • μ‹€νŒ¨ν•  κ°€λŠ₯성이 있으면 as?λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

as!

 

  • as! μ—°μ‚°μžλŠ” λŸ°νƒ€μž„μ— νŠΉμ • νƒ€μž…μœΌλ‘œ κ°•μ œ μΊμŠ€νŒ…ν•œλ‹€.
  • κ°•μ œ νƒ€μž… μΊμŠ€νŒ…μ— μ‹€νŒ¨ν•  경우 λŸ°νƒ€μž„ μ—λŸ¬κ°€ λ°œμƒν•  수 μžˆλ‹€.
  • μΊμŠ€νŒ…μ— μ„±κ³΅ν•œ 경우 μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ν•œλ‹€.(μ˜΅μ…”λ„ x)
class Person {
    var id = 0
    var name = "name"
    var email = "hgk@gmail.com"
}

class Worker: Person {	// Person을 상속 λ°›κ³  μžˆλ‹€.
    // id
    // name
    // email
    var salary = 300
}

class Programmer: Worker {	// Workerλ₯Ό 상속 λ°›κ³  μžˆλ‹€.
    // id
    // name
    // email
    // salary
    var lang = "Swift"
}


// μ—…μΊμŠ€νŒ… - as
let person1 = Person()
let worker1 = Worker()
let programmer1 = Programmer()

let personList = [person1, worker1, programmer1] // πŸ–οΈνƒ€μž…μ„ μ„ μ–Έν•˜μ§€ μ•Šμ•˜μ§€λ§Œ Person νƒ€μž…μœΌλ‘œ 인식 -> 즉 μ—…μΊμŠ€νŒ…μ΄ λ˜μ—ˆμŒ(μžλ™μœΌλ‘œ)
personList[1].name
//personList[1].salary // Person νƒ€μž…μœΌλ‘œ 보고 있기 λ•Œλ¬Έμ— salary에 μ ‘κ·Όν•˜μ§€ λͺ»ν•¨

let worker2 = Worker()
worker2.salary

let workerPerson = worker2 as Person	// μΈμŠ€ν„΄μŠ€μ™€ νƒ€μž…μ€ λ³„κ°œλ‹€.
//workerPerson.salary // Person νƒ€μž…μœΌλ‘œ 보고 있기 λ•Œλ¬Έμ— salary에 μ ‘κ·Όν•˜μ§€ λͺ»ν•¨


// λ‹€μš΄μΊμŠ€νŒ… - as? / as!
// as?
let pro = programmer1 as? Programmer // νƒ€μž… λ³€ν™˜μ΄ 될 μˆ˜λ„ 있고 μ•ˆλ  μˆ˜λ„ 있기 λ•Œλ¬Έμ— μ˜΅μ…”λ„μ„ 리턴

if let person2 = programmer1 as? Programmer {
    person2.lang
}

if let person3 = worker1 as? Programmer {	// Programmerκ°€ 더 μžμ‹νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ— λΆˆκ°€λŠ₯ν•˜λ‹€.
    person3.lang							// μ‹€ν–‰ μ•ˆλ¨.
}

// as!
let pro2 = worker2 as! Programmer // Error : νƒ€μž… λ³€ν™˜ μ‹€νŒ¨μ‹œ 였λ₯˜

 

 

 

 

 

 

'🍏 Today I Learned > Swift 문법' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Swift] ν΄λ‘œμ €  (0) 2023.12.11
[Swift] μ ‘κ·Ό μ œν•œμž  (0) 2023.12.11
[Swift] ν”„λ‘œνΌν‹° μ˜΅μ €λ²„  (0) 2023.12.08
[Swift] μ΄ˆκΈ°ν™”  (0) 2023.12.07
[Swift] 상속  (0) 2023.12.07