Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

Jupyo's Daily Story

클래스 (Class) 본문

Swift

클래스 (Class)

JangJupyo 2020. 1. 2. 21:52
728x90
반응형

클래스(Class)참조 타입을 가지는 객체 지향 프로그래밍의 핵심 구성 요소입니다. 클래스는 데이터를 저장하고, 기능을 제공하며, 상속을 통해 다른 클래스와 관계를 형성할 수 있습니다. Swift에서 클래스는 복잡한 데이터 모델을 정의하거나 참조 타입이 필요한 상황에서 주로 사용됩니다.

 

클래스의 주요 특징

  1. 참조 타입(Reference Type): 클래스는 참조 타입입니다. 즉, 인스턴스를 다른 변수에 할당하거나 함수에 전달할 때 복사되지 않고 참조가 전달됩니다. 따라서 여러 변수가 동일한 인스턴스를 가리킬 수 있으며, 한 변수에서 인스턴스를 수정하면 다른 변수에서도 수정된 결과를 확인할 수 있습니다.
  2. 상속 가능: 클래스는 상속이 가능합니다. 상속을 통해 기존 클래스의 기능을 재사용하거나 확장할 수 있습니다. 이는 구조체와 가장 큰 차이점 중 하나입니다.
  3. 이니셜라이저: 클래스는 이니셜라이저를 통해 속성을 초기화할 수 있으며, 사용자 정의 이니셜라이저를 작성할 수 있습니다. Swift에서는 기본적으로 상속되지 않는 경우 이니셜라이저가 자동으로 제공되지만, 상속 관계가 있는 경우 상위 클래스의 이니셜라이저를 호출해야 합니다.
  4. 참조 카운팅(ARC): Swift는 자동 참조 카운팅(Automatic Reference Counting, ARC)을 사용해 클래스 인스턴스의 메모리 관리를 자동으로 처리합니다. 객체가 더 이상 참조되지 않을 때 메모리가 자동으로 해제됩니다.
  5. 데이브리핑: 클래스는 deinit이라는 소멸자를 가지고 있어 인스턴스가 해제될 때 정리 작업을 수행할 수 있습니다.

 

클래스 선언 및 사용

class Animal {
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    func makeSound() {
        print("\(name) makes a sound.")
    }
    
    deinit {
        print("\(name) is being deinitialized.")
    }
}

let myDog = Animal(name: "Buddy", age: 3)
myDog.makeSound()  // "Buddy makes a sound."

 

 

클래스의 주요 개념

참조 타입(Reference Type)

  • 클래스 인스턴스는 참조 타입이므로, 변수나 상수에 할당되거나 함수에 전달될 때 복사되지 않고 참조가 전달됩니다.
let animal1 = Animal(name: "Dog", age: 5)
let animal2 = animal1	// animal과 같은 인스턴스를 참조
animal2.name = "Cat"

print(animal1.name)	// "Cat", 동일한 인스턴스를 참조하므로 함께 변경됨

 

 

상속(Inheritance)

  • 클래스는 다른 클래스로부터 상속받을 수 있습니다. 이를 통해 기존 클래스의 기능을 재사용하거나 확장할 수 있습니다.
class Dog: Animal {
	func bark() {
    	print("\(name) barks!")
    }
}

let myPet = Dog(name: "Buddy", age: 3)
myPet.bark()	// "Buddy barks!"
myPet.makeSound()	// 상위 클래스의 메서드 사용 가능, "Buddy makes a sound."

 

 

이니셜라이저(Initializer)

  • 클래스는 초기화 메서드를 사용해 속성을 초기화합니다. 상속된 클래스는 상위 클래스의 이니셜라이저를 호출해야 할 수 있습니다.
class bird: Animal {
	var canFly: Bool
    
    init(name: String, age: Int, canFly: Bool) {
    	self.canFly = canFly
        super.init(name: name, age: age)	// 상위 클래스의 초기화 호출
    }
}

 

 

deinit(소멸자)

  • 클래스 인스턴스가 메모리에서 해제될 때 호출되는 소멸자입니다. 리소스를 정리하는 작업을 수행할 수 있습니다.
deinit {
	print("\(name) is being deinitialized.")
}

 

 

클래스와 구조체의 차이점

특징 클래스(Class) 구조체(Struct)
타입 참조 타입(Reference Type) 값 타입(Value Type)
상속 가능 불가능
메모리 관리 자동 참조 카운팅(ARC) 메모리 관리 불필요
이니셜라이저 사용자 정의 필요 멤버와이즈 이니셜라이저 제공
소멸자 deinit을 사용해 소멸 시 리소스 정리 소멸자 없음

 

클래스의 활용

  • 상속이 필요한 경우: 상속을 통해 공통 기능을 확장하거나 재사용해야 하는 경우, 클래스가 적합합니다.
  • 참조가 필요한 경우: 여러 변수가 동일한 객체를 참조하고, 변경 사항이 여러 곳에서 반영되어야 하는 상황에서는 클래스가 유리합니다.

 

클래스는 주로 복잡한 데이터 모델링, 네트워크 작업, 객체 간의 관계 형성 및 관리를 할 때 많이 사용됩니다.

반응형

'Swift' 카테고리의 다른 글

PictureInPicture  (0) 2020.10.21
Array vs NSArray, NSMutableArray  (0) 2020.01.22
iOS 13버전 SNS Login 대응 방법  (0) 2020.01.10
구조체 (Struct)  (0) 2019.12.30
주석 작성법  (0) 2019.12.29