
인스턴스는 클래스, 구조체, 열거형 등의 설계도(타입)를 바탕으로 만들어진 실제 데이터입니다.
// 클래스 정의
class Dog {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func bark() {
print("\(name): 멍멍!")
}
}
// 인스턴스 생성
let bori = Dog(name: "보리", age: 3) // bori는 Dog 클래스의 인스턴스
let choco = Dog(name: "초코", age: 5) // choco도 Dog 클래스의 인스턴스
// 인스턴스 사용
bori.bark() // 출력: "보리: 멍멍!"
choco.bark() // 출력: "초코: 멍멍!"
슈퍼클래스는 다른 클래스가 상속하는 부모 클래스를 의미합니다. 자식 클래스는 부모 클래스의 특성을 물려받습니다.
// 슈퍼클래스
class Animal {
var name: String
init(name: String) {
self.name = name
}
func makeSound() {
print("동물이 소리를 냅니다")
}
}
// 서브클래스 (자식클래스)
class Cat: Animal { // Animal이 Cat의 슈퍼클래스
override func makeSound() { // 메서드 재정의
print("야옹!")
}
func scratch() { // 새로운 메서드 추가
print("할퀴기!")
}
}
// 사용 예시
let kitty = Cat(name: "키티")
kitty.makeSound() // 출력: "야옹!"
kitty.scratch() // 출력: "할퀴기!"
// UIViewController는 슈퍼클래스
class FrameWorkListViewController: UIViewController {
// UIViewController의 모든 기능을 상속받음
override func viewDidLoad() {
super.viewDidLoad() // 슈퍼클래스의 메서드 호출
// 추가 구현
}
}
UIViewController (슈퍼클래스)
↑
│
FrameWorkListViewController (서브클래스)
속성과 메서드 상속
class Vehicle { // 슈퍼클래스
var speed = 0
func move() {
print("이동 중")
}
}
class Car: Vehicle { // 서브클래스
var brand = ""
// speed와 move()를 상속받음
}
메서드 오버라이딩 (재정의)
class Bird: Animal {
override func makeSound() {
print("짹짹") // 슈퍼클래스의 메서드를 재정의
}
}
super 키워드
class Student: Person {
override func introduce() {
super.introduce() // 슈퍼클래스의 메서드 호출
print("저는 학생입니다")
}
}
// UI 컴포넌트 상속 관계
UIView (슈퍼클래스)
↑
UIControl
↑
UIButton (서브클래스)
// 뷰컨트롤러 상속 관계
UIViewController (슈퍼클래스)
↑
UITableViewController (서브클래스)
코드 재사용
구조화된 설계
다형성 구현
// 다형성 예시
let animals: [Animal] = [
Cat(name: "나비"),
Dog(name: "멍멍이"),
Bird(name: "짹짹이")
]
// 각각 다른 동물이지만 같은 메서드 호출 가능
for animal in animals {
animal.makeSound() // 각 동물이 자신의 소리를 냄
}
이해하기 쉽게 정리하면: