다형성(Polymorphism)은 하나의 객체(인스턴스)에 여러 가지 타입을 대입하여 표현할 수 있다는 것을 의미합니다.
✅ 하나의 인스턴스(ABC)를 여러가지 타입으로 표현
클래스에서 만들어진 프로퍼티는 힙(heap)영역에 저장된 값을 참조하여 접근하지만, 메서드의 경우에는 데이터(data)영역에 저장된 코드(code) 주소를 사용하여 함수를 접근합니다.(재정의된 메서드에 접근 가능)
class A{ var a: Int = 1 func aaa(){ print("저는 a입니다.") } } class B: A{ var b: Int = 2 override func aaa(){ print("저는 a(class B: A)입니다.") } func bbb(){ print("저는 b입니다.") } } class C: B{ var c: Int = 3 override func aaa(){ print("저는 a(class C: B)입니다.") } override func bbb(){ print("저는 b(class C: B)입니다.") } func ccc(){ print("저는 c입니다.") } } var ABC = [A(), B(), C()] //각각 상속받아 재정의된 함수를 출력 ABC[0].aaa() //A클래스 접근, 저는 a입니다. ABC[1].aaa() //B클래스 접근, 저는 a(class B: A)입니다. ABC[2].aaa() //C클래스 접근, 저는 a(class C: B)입니다.
⭐️메서드 호출 시 상위 클래스에 접근하여 메서드를 호출하는 것이 아닌, 본인의 클래스에서 재정의된 메서드 또는 상속받은 메서드를 호출!!
참고자료: 앨런 Swift문법 마스터 스쿨