Post

스위프트의 서브클래싱(상속)과 익스텐션

스위프트의 서브클래싱(상속)과 익스텐션

클래스를 만들기만 하고 상속 받지는 않았다 클래스는 상속을 통하여 클래스 계층 구조를 만든다 최상위에 있는 베이스 클래스 또는 루트 클래스라고 부르며 상속 받은 클래스들을 하위 클래스 또는 자식 클래스라고 부른다 하위 클래스가 상속받은 클래스 부모 클래스 또는 상위 클래스라고 한다

클래스 상속

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class BankAccount {
    var accountBalance: Float
    var accountNumber: Int
    
    init(number: Int, balance: Float) {
        accountNumber = number
        accountBalance = balance
    }
    
    func displayBalance() {
        print("Number \(accountNumber)")
        print("Current balance is \(accountBalance)")
    }
}

여기서 추가적을 기능을 확장하기 위해서 상속을 한다 여기서는 모든 기능을 유지하고 계좌에 저축 기능을 넣는다

1
2
3
4
5
6
7
8
9
10
class SavingsAccount: BankAccount {
  
	var interestRate: Float = 8.0 
  
  func calculateInterest() -> Float
	{
  	return interestRate * accountBalance
	}
}

 

오버라이딩

상속받은 클래스를 오버라이딩해서 새로운 메서드를 정의할 수 있다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class SavingsAccount: BankAccount {
  
	var interestRate: Float = 8.0 
  
  func calculateInterest() -> Float
	{
  	return interestRate * accountBalance
	}
  
  override func displayBalance()
  {
		print("Number \(accountNumber)")
		print("Current balance is \(accountBalance) ")
		print("Prevailing interest rate is \(interestRate)")
	}
}

오버라이딩 된 메소드가 아닌 상위 메소드를 호출하기위해서는 super를 사용하면 된다

 

클래스 익스텐션

클래스에 새로운 기능을 추가는 방법 익스텐션은 하위 클래스를 생성하거나 참조하지 않고 기존 클래스에 메서드, 생성자, 연산 프로퍼티, 서브스크립트등의 기능을 추가하기 위하여 사용한다

1
2
3
4
5
extension BankAccount {
  var num: Float {
    return accountNumber * accountNumber
  }
}
1
2
3
var ad = BankAccount(number: 20, balance: 10.0)

print(ad.num) //: 400 출력

익스텐션은 하위 클래스를 사용하지 않고 클래스의 기능을 확장할 수 있는 빠르고 편리한 기능을 제공한다 하지만 오버라이딩 할 수 없고 저장 프로퍼티를 포함 할 수 없다

This post is licensed under CC BY 4.0 by the author.