
// 기본 클래스 정의
class Person {
var name: String = ""
// 인스턴스 메서드: 인스턴스마다 다른 동작을 할 수 있는 메서드
func selfIntroduce() {
print("저는 \(name)입니다.")
}
// final 키워드를 사용하여 재정의를 방지할 수 있습니다.
// 이 메서드는 서브클래스에서 재정의할 수 없습니다.
final func sayHello() {
print("hello")
}
// 타입 메서드: 클래스 자체에서 호출할 수 있는 메서드
// static으로 정의된 메서드는 재정의할 수 없습니다.
static func typeMethod() {
print("type method - static")
}
// class로 정의된 메서드는 서브클래스에서 재정의할 수 있습니다.
class func classMethod() {
print("type method - class")
}
// final class로 정의된 메서드는 재정의할 수 없습니다.
final class func finalClassMethod() {
print("type method - final class")
}
}
// 상속을 통해 Person 클래스를 기반으로 새로운 Student 클래스 정의
class Student: Person {
var major: String = ""
// 상위 클래스의 메서드를 재정의
override func selfIntroduce() {
print("저는 \(name)이고, 전공은 \(major)입니다.")
}
// 재정의 가능한 타입 메서드 재정의
override class func classMethod() {
print("overridden type method - class")
}
// static으로 정의된 메서드는 재정의할 수 없습니다.
// override static func typeMethod() { }
// final로 정의된 메서드는 재정의할 수 없습니다.
// override func sayHello() { }
// override class func finalClassMethod() { }
}
- 'Person' 클래스는 기본적인 속성과 메서드를 정의합니다.
- 'Student' 클래스는 'Person' 클래스를 상속받아 추가적인 속성과 메서드를 정의하며 상위 클래스의 메서드를 재정의할 수 있습니다.
// Person 클래스의 인스턴스 생성
let geuni: Person = Person()
geuni.name = "geuni"
// Student 클래스의 인스턴스 생성
let hana: Student = Student()
hana.name = "hana"
hana.major = "Swift"
// Person 클래스의 메서드 호출
geuni.selfIntroduce() // 저는 geuni입니다.
// Student 클래스에서 재정의한 메서드 호출
hana.selfIntroduce() // 저는 hana이고, 전공은 Swift입니다.
// 타입 메서드 호출
Person.classMethod() // type method - class
Person.typeMethod() // type method - static
Person.finalClassMethod() // type method - final class
Student.classMethod() // overridden type method - class
Student.typeMethod() // type method - static
Student.finalClassMethod() // type method - final class
- 'geuni'는 'Person' 클래스의 인스턴스이고, 'hana'는 'Student' 클래스의 인스턴스 입니다.
- 'Student' 클래스는 'Person' 클래스의 메서드를 재정의하여 자신의 특성에 맞게 동작합니다.
- 'typeMethod'와 'finalClassMethod'는 재정의가 불가능한 메서드입니다.
상속(Inheritance): 새로운 클래스가 기존 클래스의 속성과 메서드를 물려받아 사용하는 것
슈퍼클래스(Superclass): 상속을 제공하는 클래스
서브클래스(Subclass): 상속을 받는 클래스
재정의(Override): 서브클래스에서 슈퍼클래스의 메서드를 변경하는 것
final: 클래스 또는 메서드 앞에 사용하여 상속이나 재정의를 방지하는 키워드
인스턴스(Instance): 클래스의 설계도에 따라 메모리에 할당된 실제 객체.
인스턴스는 클래스에서 정의한 속성과 메서드를 실제로 사용.
각각의 인스턴스는 독립적인 속성 값을 가질 수 있음.
메서드(Method): 클래스 내부에 정의된 함수. 메서드는 클래스의 인스턴스가 특정 동작을 수행할 수 있도록 합니다.
메서드는 인스턴스 메서드와 타입 메서드로 나눌 수 있습니다.
- 인스턴스 메서드(Instance Method): 인스턴스에 속하는 메서드로 인스턴스의 속성을 읽거나 수정할 수 있습니다. 'self'를 통해 인스턴스 자신을 참조합니다.
- 타입 메서드(Type Method): 클래스 자체에 속하는 메서드로 인스턴스와는 독립적으로 호출됩니다. 'static' 또는 'class' 키워드를 사용하여 정의합니다.