SlideShare a Scribd company logo
1 of 16
Inheritance
Basic concept of Inheritance
• Subclass : 상속 받는 클래스
• Superclass : subclass가 상속하는 클래스
• 모든 클래스는 상위 클래스에 속한 메서드, 프로퍼티, 서브스크립트들을 호출하고
접근할 수 있고, 해당 메서드, 프로퍼티, 서브스크립트들을 오버라이딩하여
재정의할 수 있다.
Define as a Base Class
어떠한 클래스도 상속받지 않은 클래스, 즉, 상위클래스를 갖지 않는 클래스
Define as a Base Class
class Vehicle {
var numberOfWheels : Int
var maxPassengers : Int
func description() -> String {
return “(numberOfWheels) wheels; up to (maxPassengers) passengers”
}
init() {
numberOfWheels = 0
maxPassengers = 1
}
}
let vehicle = Vehicle()
베이스클래스 정의 부분
Vehicle의 새로운 인스턴스 생성
Subclassing
• 하위클래스를 정의한다 => 기존 클래스를 기반으로 새로운 클래스를 생성하는 것
• 기존 클래스의 모든 특징을 상속받고, 재정의할 수 있다.
Basic structure Of subclass
class SomeClass : SomeSuperClass {
//class definition goes here
}
Subclassing
class Bicycle : Vehicle {
init() {
super.init()
numberOfWheels = 2
}
}
let bicycle = Bicycle()
println(“Bicycle : (bicycle.description())”)
//Bicycle : 2 wheels; up to 1 passengers
class Tandem : Bicycle {
init() {
super.init()
maxPassengers = 2
}
}
Subclassing
let tandem = Tandem()
println( Tandem : (tandem.description());)
//Tandem : 2 wheels; up to 2 passengers
Overriding
• 하위클래스에서 인스턴스 메서드, 클래스 메서드, 인스턴스 프로퍼티,
서브스크립트에 대해 자신만의 커스텀 구현체를 제공하는 것
• 즉, 기능의 재정의
• 상속한 특징을 override하기 위해서는 반드시 앞에 override 키워드를 붙인다.
• Override 키워드가 없는 override는 컴파일 에러!
Accessing superclass, methods, properties and subscripts
• super 접두사를 통해 상위클래스의 메서드, 프로퍼티, 서브스크립트에 접근 가능
• someMethod()가 override 됐을 경우 super.someMethod()를 통해 접근
• someProperty가 override 됐을 경우 super.someProperty를 통해 접근
• someIndex가 override 됐을 경우 super[someIndex]를 통해 접근
Overriding Methods
class Car : Vehicle {
var speed: Double = 0.0
init() {
super.init()
maxPassengers = 5
numberOfWheels = 4
}
override func description() -> String {
return super.description() + “;” + “traveling at (speed) mph”
}
}
let car = Car()
println(“Car : (car.description())”);
//Car : 4 wheels; up to 5 passengers; traveling at 0.0 mph
Overriding Properties
• 상속한 프로퍼티를 오버라이드하려면 그 프로퍼티가 stored 혹은 computed
프로퍼티인지 관계없이 커스텀 접근자와 설정자를 제공
• 하위클래스는 오로지 상속한 프로퍼티의 이름과 타입만 알게 됨
• 항상 오버라이딩하려는 프로퍼티의 이름과 타입을 동일하게 설정
• 읽기만 가능했던 프로퍼티를 읽기, 쓰기 둘다 가능하게 오버라이딩 가능
• 하지만, 읽고 쓰기가 가능했던 프로퍼티를 읽기만 가능한 프로퍼티로 오버로딩하는 것은
불가능
Overriding Properties
class SpeedLimitedCar : Car {
override var speed : Double {
get {
return super.speed
}
set {
super.speed = min(newValue, 40.0)
}
}
}
let limitedCar = SpeedLimitedCar()
limitedCar.speed = 60.0
println(“SpeedLimitedCar : (limitedCar.description())”)
//SpeedLimitedCar : 4 wheels; up to 5 passengers; traveling at 40.0 mph
Overriding Property Observers
• 프로퍼티 관찰자는 상수 혹은 읽기 전용 프로퍼티에 추가될 수 없음
• 프로퍼티 값은 다시 설정될 수 없으므로 willSet() 혹은 didSet()을 제공하는 게
적절하지 않음
• 오버라이딩 설정자와 오버라이딩 프로퍼티 관찰자를 동시에 제공 불가능
Overriding Property Observers
class AutomaticCar : Car {
var gear = 1
override var speed : Double {
didSet {
gear = Int(speed / 10.0 ) + 1
}
}
override func description() -> String {
return super.description() + “in gear (gear)”
}
}
Preventing Overrides
• Override를 방지하려면 @final을 첫 키워드에 표시
• 하위클래스 내에 final 메서드, 프로퍼티, 서브스크립트를 오버라이드하면
컴파일 에러 발생
• 전체 클래스를 final로 만들려면 class 앞에 @final 표시, 하위 클래스를 final
클래스로 만들려면 컴파일 에러 발생
Thank You

More Related Content

Viewers also liked

How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheLeslie Samuel
 
Original Photography Makes Demand Media’s Content for Real Life Come to Life
Original Photography Makes Demand Media’s Content for Real Life Come to LifeOriginal Photography Makes Demand Media’s Content for Real Life Come to Life
Original Photography Makes Demand Media’s Content for Real Life Come to LifeDemandMedia
 
Rational rose 2007
Rational rose 2007Rational rose 2007
Rational rose 2007Zick Zick
 
Presentation usb модемы
Presentation usb модемыPresentation usb модемы
Presentation usb модемыm_lenochka
 
#Natidigitali 2014
#Natidigitali 2014#Natidigitali 2014
#Natidigitali 2014Natidigitali
 
Noi dungbaocao 1
Noi dungbaocao 1Noi dungbaocao 1
Noi dungbaocao 1Zick Zick
 
Ddd group,inc.a+ painting&more businesspackage
Ddd group,inc.a+ painting&more businesspackageDdd group,inc.a+ painting&more businesspackage
Ddd group,inc.a+ painting&more businesspackageRay Diaz
 
JOISP2013 Day3 Cake
JOISP2013 Day3 CakeJOISP2013 Day3 Cake
JOISP2013 Day3 Cake__m3n
 
Сервіси web 2.0 для вчителя
Сервіси web 2.0 для вчителяСервіси web 2.0 для вчителя
Сервіси web 2.0 для вчителяTamara Vasilevskaya
 
20 Simple Prayers to Inspire and Encourage
20 Simple Prayers to Inspire and Encourage20 Simple Prayers to Inspire and Encourage
20 Simple Prayers to Inspire and EncourageAlex Blackwell
 
Blog Audit: Make Your Blog Brand and PR Ready
Blog Audit: Make Your Blog Brand and PR ReadyBlog Audit: Make Your Blog Brand and PR Ready
Blog Audit: Make Your Blog Brand and PR ReadyConnectingBloggersBrands
 
French classical menu
French classical menuFrench classical menu
French classical menuPranab Sarkar
 
TEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkTEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkVolker Hirsch
 

Viewers also liked (19)

How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 
Anahatha & Vishuddhi
Anahatha & VishuddhiAnahatha & Vishuddhi
Anahatha & Vishuddhi
 
Original Photography Makes Demand Media’s Content for Real Life Come to Life
Original Photography Makes Demand Media’s Content for Real Life Come to LifeOriginal Photography Makes Demand Media’s Content for Real Life Come to Life
Original Photography Makes Demand Media’s Content for Real Life Come to Life
 
Rational rose 2007
Rational rose 2007Rational rose 2007
Rational rose 2007
 
Presentation usb модемы
Presentation usb модемыPresentation usb модемы
Presentation usb модемы
 
#Natidigitali 2014
#Natidigitali 2014#Natidigitali 2014
#Natidigitali 2014
 
The Truth About You
The Truth About YouThe Truth About You
The Truth About You
 
Agnya & Sahastrara
Agnya & SahastraraAgnya & Sahastrara
Agnya & Sahastrara
 
Noi dungbaocao 1
Noi dungbaocao 1Noi dungbaocao 1
Noi dungbaocao 1
 
Ddd group,inc.a+ painting&more businesspackage
Ddd group,inc.a+ painting&more businesspackageDdd group,inc.a+ painting&more businesspackage
Ddd group,inc.a+ painting&more businesspackage
 
JOISP2013 Day3 Cake
JOISP2013 Day3 CakeJOISP2013 Day3 Cake
JOISP2013 Day3 Cake
 
Сервіси web 2.0 для вчителя
Сервіси web 2.0 для вчителяСервіси web 2.0 для вчителя
Сервіси web 2.0 для вчителя
 
20 Simple Prayers to Inspire and Encourage
20 Simple Prayers to Inspire and Encourage20 Simple Prayers to Inspire and Encourage
20 Simple Prayers to Inspire and Encourage
 
Blog Audit: Make Your Blog Brand and PR Ready
Blog Audit: Make Your Blog Brand and PR ReadyBlog Audit: Make Your Blog Brand and PR Ready
Blog Audit: Make Your Blog Brand and PR Ready
 
Media Kits for Bloggers
Media Kits for BloggersMedia Kits for Bloggers
Media Kits for Bloggers
 
#Natidigitali
#Natidigitali#Natidigitali
#Natidigitali
 
2 cage culture
2 cage culture2 cage culture
2 cage culture
 
French classical menu
French classical menuFrench classical menu
French classical menu
 
TEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkTEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of Work
 

Inheritance

  • 2. Basic concept of Inheritance • Subclass : 상속 받는 클래스 • Superclass : subclass가 상속하는 클래스 • 모든 클래스는 상위 클래스에 속한 메서드, 프로퍼티, 서브스크립트들을 호출하고 접근할 수 있고, 해당 메서드, 프로퍼티, 서브스크립트들을 오버라이딩하여 재정의할 수 있다.
  • 3. Define as a Base Class 어떠한 클래스도 상속받지 않은 클래스, 즉, 상위클래스를 갖지 않는 클래스
  • 4. Define as a Base Class class Vehicle { var numberOfWheels : Int var maxPassengers : Int func description() -> String { return “(numberOfWheels) wheels; up to (maxPassengers) passengers” } init() { numberOfWheels = 0 maxPassengers = 1 } } let vehicle = Vehicle() 베이스클래스 정의 부분 Vehicle의 새로운 인스턴스 생성
  • 5. Subclassing • 하위클래스를 정의한다 => 기존 클래스를 기반으로 새로운 클래스를 생성하는 것 • 기존 클래스의 모든 특징을 상속받고, 재정의할 수 있다. Basic structure Of subclass class SomeClass : SomeSuperClass { //class definition goes here }
  • 6. Subclassing class Bicycle : Vehicle { init() { super.init() numberOfWheels = 2 } } let bicycle = Bicycle() println(“Bicycle : (bicycle.description())”) //Bicycle : 2 wheels; up to 1 passengers
  • 7. class Tandem : Bicycle { init() { super.init() maxPassengers = 2 } } Subclassing let tandem = Tandem() println( Tandem : (tandem.description());) //Tandem : 2 wheels; up to 2 passengers
  • 8. Overriding • 하위클래스에서 인스턴스 메서드, 클래스 메서드, 인스턴스 프로퍼티, 서브스크립트에 대해 자신만의 커스텀 구현체를 제공하는 것 • 즉, 기능의 재정의 • 상속한 특징을 override하기 위해서는 반드시 앞에 override 키워드를 붙인다. • Override 키워드가 없는 override는 컴파일 에러!
  • 9. Accessing superclass, methods, properties and subscripts • super 접두사를 통해 상위클래스의 메서드, 프로퍼티, 서브스크립트에 접근 가능 • someMethod()가 override 됐을 경우 super.someMethod()를 통해 접근 • someProperty가 override 됐을 경우 super.someProperty를 통해 접근 • someIndex가 override 됐을 경우 super[someIndex]를 통해 접근
  • 10. Overriding Methods class Car : Vehicle { var speed: Double = 0.0 init() { super.init() maxPassengers = 5 numberOfWheels = 4 } override func description() -> String { return super.description() + “;” + “traveling at (speed) mph” } } let car = Car() println(“Car : (car.description())”); //Car : 4 wheels; up to 5 passengers; traveling at 0.0 mph
  • 11. Overriding Properties • 상속한 프로퍼티를 오버라이드하려면 그 프로퍼티가 stored 혹은 computed 프로퍼티인지 관계없이 커스텀 접근자와 설정자를 제공 • 하위클래스는 오로지 상속한 프로퍼티의 이름과 타입만 알게 됨 • 항상 오버라이딩하려는 프로퍼티의 이름과 타입을 동일하게 설정 • 읽기만 가능했던 프로퍼티를 읽기, 쓰기 둘다 가능하게 오버라이딩 가능 • 하지만, 읽고 쓰기가 가능했던 프로퍼티를 읽기만 가능한 프로퍼티로 오버로딩하는 것은 불가능
  • 12. Overriding Properties class SpeedLimitedCar : Car { override var speed : Double { get { return super.speed } set { super.speed = min(newValue, 40.0) } } } let limitedCar = SpeedLimitedCar() limitedCar.speed = 60.0 println(“SpeedLimitedCar : (limitedCar.description())”) //SpeedLimitedCar : 4 wheels; up to 5 passengers; traveling at 40.0 mph
  • 13. Overriding Property Observers • 프로퍼티 관찰자는 상수 혹은 읽기 전용 프로퍼티에 추가될 수 없음 • 프로퍼티 값은 다시 설정될 수 없으므로 willSet() 혹은 didSet()을 제공하는 게 적절하지 않음 • 오버라이딩 설정자와 오버라이딩 프로퍼티 관찰자를 동시에 제공 불가능
  • 14. Overriding Property Observers class AutomaticCar : Car { var gear = 1 override var speed : Double { didSet { gear = Int(speed / 10.0 ) + 1 } } override func description() -> String { return super.description() + “in gear (gear)” } }
  • 15. Preventing Overrides • Override를 방지하려면 @final을 첫 키워드에 표시 • 하위클래스 내에 final 메서드, 프로퍼티, 서브스크립트를 오버라이드하면 컴파일 에러 발생 • 전체 클래스를 final로 만들려면 class 앞에 @final 표시, 하위 클래스를 final 클래스로 만들려면 컴파일 에러 발생