iOS 복습(4)
상속
- 다른 언어와 똑같이 부모의 클래스를 자식이 물려받는다.
구조) class 자식클래스 : 부모클래스{ }
class Twice{ var value : Int = 2 var twice : Double = 2.0 func display(){ print("value = \(value), twice= \(twice)") } init(value: Int, twice: Double){ self.value = value self.twice = twice } } class One : Twice{ // Twice클래스를 One클래스에 상속 } var kim : Twice = Twice(value:1,twice:1.1) yoo.display() var yoo : One = One(value:10,twice:10.2) yoo.display()
value = 1, twice= 1.1
value = 10, twice= 10.2
- super | 부모 메서드 호출시 사용
class Twice{ var value : Int = 2 var twice : Double = 2.0 func display(){ print("value = \(value), twice= \(twice)") } init(value: Int, twice: Double){ self.value = value self.twice = twice } } class One : Twice{ // Twice클래스를 One클래스에 상속 var name : String = "Yoo" func display2(){ print("name = \(name), value = \(value), twice= \(twice)") } init(value: Int, twice: Double, name: String){ super.init(value:Int, twice:Double) // super를 사용해서 부모 클래스인 Twice 클래스에 있는 생성자를 가져온다. self.name = name } } var yoo : One = One(value:10,twice:10.2,name:"유재우") yoo.display2()
value = 10, twice= 10.2, name=유재우
override
- 부모와 자식에 같은 메서드가 있으면 자식 우선 사용한다.
class Twice{ var value : Int = 2 var twice : Double = 2.0 func display(){ print("value = \(value), twice= \(twice)") } init(value: Int, twice: Double){ self.value = value self.twice = twice } } class One : Twice{ var name : String = "Yoo" override func display(){ // 부모 자식 모두 display()라는 메서드가 있어 자식클래스에 메서드 선언 앞에 override를 써서 우선적으로 호출됨 print("name = \(name), value = \(value), twice= \(twice)") } init(value: Int, twice: Double, name: String){ super.init(value:Int, twice:Double) self.name = name } } var yoo : One = One(value:10,twice:10.2,name:"유재우") yoo.display()
value = 10, twice= 10.2, name=유재우
extension
- 하위 클래스를 생성하거나 참조하지 않고 기존 클래스에 메서드, 생성자, 계산 프로퍼티 등의 기능을 추가하기 위해 사용한다.
구조) extension 기존타입이름 { // 새로운 기능 }
예) extension Double { var squared : Double { return self * self } } let myValue : Double = 2.0 print(myValue.squared) print(5.0.squared)
4.0
25.0
접근제어
- Internal이 기본형이다.
open ↑ 높은 접근수준 ⌉ 클래스, 클래스 멤버에만 적용 public ⎮ ⌋ 어디서나 접근이 가능 internal 기본형 fileprivate ⎮ 해당 소스 파일 내에서만 사용가능 private ↓ 낮은 접근수준 블록과 동일한 파일에 있는 접근만 가능
프로토콜
- 부모 클래스 상속은 하나만 가능하지만 프로토콜은 여러개 가능하다.
구조) protocol 프로토콜명{ 프로퍼티명 메서드 선언 // 메서드는 선언만 있고 정의는 쓸 필요가 없음 } protocol 프로토콜명 : 다른 프로토콜1,다른 프로토콜2{ } 선언 예시) class 클래스명 : 부모 클래스, 프로토콜명{} class 클래스명 : 부모 클래스, 프로토콜명1,프로토콜명2{} // 상속을 할 때엔 부모 클래스명 다음에 표기한다. class 클래스명 : 프로토콜명{} class 클래스명 : 프로토콜명1,프로토콜명2{} // 상속을 하지 않을 때엔 바로 프로토콜 명을 표기한다.
protocol ExProtocol { var x: Int { get set} // 읽기 쓰기 가능 var y: Int {get} // 읽기 전용 static var tx: Int { get set} static func typeMethod() // 메서드는 선언만 func random() -> Double // 마찬가지로 선언만 }
- 채택과 준수
protocol Say { var x : Int {get set} // 읽기, 쓰기 가능한 프로퍼티 x 선언 func shout() // shout() 메서드 선언 } class You : say { // Yoo클래스에서 Say프토로콜을 채택(adopt) var x : Int = 2 // 프로퍼티 x에 대한 정의 준수(conform) func shout(){print("소리질러!")} // shout()메서드의 기능 정의 준수(conform) }
Author And Source
이 문제에 관하여(iOS 복습(4)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@blooper20/iOS-복습3-8cvbtf74저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)