인스턴스, 슈퍼클래스

jeongmuyamette·2025년 2월 10일

TIL

목록 보기
41/72
post-thumbnail

1. 인스턴스 (Instance)

인스턴스는 클래스, 구조체, 열거형 등의 설계도(타입)를 바탕으로 만들어진 실제 데이터입니다.

1.1. 실생활 비유

  • 클래스는 "붕어빵 틀"
  • 인스턴스는 "실제 붕어빵"

1.2. 코드 예시

// 클래스 정의
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()   // 출력: "초코: 멍멍!"

2. 슈퍼클래스 (Superclass)

슈퍼클래스는 다른 클래스가 상속하는 부모 클래스를 의미합니다. 자식 클래스는 부모 클래스의 특성을 물려받습니다.

2.1. 상속 관계 예시

// 슈퍼클래스
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()    // 출력: "할퀴기!"

2.2. iOS 개발에서의 실제 예시

// UIViewController는 슈퍼클래스
class FrameWorkListViewController: UIViewController {
    // UIViewController의 모든 기능을 상속받음
    
    override func viewDidLoad() {
        super.viewDidLoad()  // 슈퍼클래스의 메서드 호출
        // 추가 구현
    }
}

2.3. 상속 관계 도식화

UIViewController (슈퍼클래스)
     ↑
     │
FrameWorkListViewController (서브클래스)

2.4. 상속의 특징

  1. 속성과 메서드 상속

    class Vehicle {  // 슈퍼클래스
        var speed = 0
        func move() {
            print("이동 중")
        }
    }
    
    class Car: Vehicle {  // 서브클래스
        var brand = ""
        // speed와 move()를 상속받음
    }
  2. 메서드 오버라이딩 (재정의)

    class Bird: Animal {
        override func makeSound() {
            print("짹짹")  // 슈퍼클래스의 메서드를 재정의
        }
    }
  3. super 키워드

    class Student: Person {
        override func introduce() {
            super.introduce()  // 슈퍼클래스의 메서드 호출
            print("저는 학생입니다")
        }
    }

2.5. 실제 iOS 개발에서 자주 보는 상속 관계

// UI 컴포넌트 상속 관계
UIView (슈퍼클래스)UIControlUIButton (서브클래스)

// 뷰컨트롤러 상속 관계
UIViewController (슈퍼클래스)UITableViewController (서브클래스)

2.6. 상속의 장점

  1. 코드 재사용

    • 공통 기능을 슈퍼클래스에 구현
    • 중복 코드 감소
  2. 구조화된 설계

    • 계층적 구조로 코드 정리
    • 유지보수 용이
  3. 다형성 구현

    // 다형성 예시
    let animals: [Animal] = [
        Cat(name: "나비"),
        Dog(name: "멍멍이"),
        Bird(name: "짹짹이")
    ]
    
    // 각각 다른 동물이지만 같은 메서드 호출 가능
    for animal in animals {
        animal.makeSound()  // 각 동물이 자신의 소리를 냄
    }

이해하기 쉽게 정리하면:

  • 인스턴스는 설계도(클래스)로 만든 실제 물건입니다.
  • 슈퍼클래스는 기본 기능을 가진 부모 클래스로, 자식 클래스들이 이 기능을 물려받아 사용하거나 수정할 수 있습니다.

0개의 댓글