- 상속
- 단일 상속 (single inheritance) = 스위프트에서 하위 클래스는 단 하나의 부모 클래스만 상속받을 수 있음
- 형식 = class 자식:부모 {} / class 클래스명:부모명, 프로토콜명1,프로토콜명2 {}
- 부모가 없으면 프로토콜명 바로 표기가능
- 상속은 클래스만 가능하다
class Ho{ var age : Int = 21 var height : Double = 170.7 func display(){ print("나이=\(age), 신장=\(height)") } init(age:Int,height:Double){ self.age = age self.height = height } } class Child : Ho{ } var shin : Ho = Ho(age:21,height:175.5) shin.display() //나이=21,신장=175.5 var hyeon : Child = Child(age:20,height:169.9) hyeon.display() //나이=20,신장=169.9 print(hyeon.age) //20
- super. = 자식에서 부모클래스의 멤버변수를 사용할 때 사용
class Ho{ var age : Int = 21 var height : Double = 170.7 func display(){print("나이=\(age), 신장=\(height)")} init(age:Int,height:Double){ self.age = age self.height = height }} class Child : Ho{ var name : String = "신현호" func displayS(){ print("이름=\(name),나이=\(age), 신장=\(height)")} init(age:Int, height:Double, name:String){ //변수명 변환가능 (age = age1) super.init(age:age,height:height) self.name = name }} var shin = Child(age:21,height:175.5,name:"신현호") shin.displayS() //이름=신현호,나이=21, 신장=175.5 shin.display() //나이=21, 신장=175.5
- 단일 상속 (single inheritance) = 스위프트에서 하위 클래스는 단 하나의 부모 클래스만 상속받을 수 있음
- Overriding
- 부모와 자식에 같은 메서드가 있으면 자식 우선
- 상속 받은 함수 부분 중 마음에 들지 않는 함수를 똑같은 이름과 똑같은 매개변수의 리턴형을 만들고 사용한다.
- ㄴ 부모의 함수가 아닌 자식의 함수가 사용된다.
- 부모형의 함수와 모든 것이 동일하고 기능만 다르게 구현해야한다 ex) 리턴형,이름,매개변수등
class Ho{ var age : Int = 21 var height : Double = 170.7 func display(){print("나이=\(age), 신장=\(height)")} init(age:Int,height:Double){ self.age = age self.height = height }} class Child : Ho{ var name : String = "신현호" override func display(){ //자식에서 생성한 함수 호출 / 자식이 우선순위 print("이름=\(name),나이=\(age), 신장=\(height)")} init(age:Int, height:Double, name:String){ super.init(age:age,height:height) self.name = name }} var shin = Child(age:21,height:175.5,name:"신현호") shin.display() //이름=신현호,나이=21, 신장=175.5
- Overloading : 생성자 중첩
- 매개변수의 개수와 자료형이 다른 같은 이름의 함수를 여러 개 정의
class Ho{ var age : Int var weight : Double = 70 var height : Double = 170 func display(){ print("나이 = \(age), 몸무게 = \(weight), 키 = \(height)") } init(age : Int, weight : Double, height : Double){ self.age = age self.weight = weight self.height = height } //designaed initializer init(age : Int){ //매개변수의 개수와 자료형이 다른 같은 이름의 함수를 여러 개 정의 self.age = age } } var shin : Ho = Ho(age : 21, weight : 70, height : 170) var shin1 : Ho = Ho(age : 20) //20 //overloading 호출 shin.display() shin1.display() }
- 익스텐션(extension)
-
하위 클래스를 생성하거나 참조하지 않고 기존 클래스에
메서드, 생성자(initializer),계산 프로퍼티 등의 기능을 추가하기 위하여 사용
-
기본 구문 = extension 기존타입이름 {// 새로운 기능 }
extension Double { var squared : Double{ return self*self } } extension Double{ var plus : Double{ return self + 4.0 } } let ho : Double = 4.4 print(ho.squared) //19.360000000000003 print(4.0.squared) //Double형 값에도 .으로 바로 사용 가능 , 16.0 print(4.4.plus) //8.4
-
- Swift 접근제어
-
access modifier = 구성 요소를 캡슐화 하는 데 사용
ㄴ 접근 속성(접근 수정자, 액세스 수정자, 액세스 지정자 )는
클래스, 메서드, 멤버의 접근 가능성을 설정하는 객체 지향 언어의 키워드
-
모듈은 코드 배포(code distribution)의 단일 유닛
ㄴ [open 접근 및 public 접근]을 통해 모듈의 모든 소스 파일 내에서 사용할 수 있으며, 정의한 모듈을 가져오는 다른 모듈의
소스파일에서도 사용할 수 있다. 일반적으로 Framework에 공용 인터페이스를 지정할 때는 open 또는 public 접근을 사용한다.
※ open 접근은 클래스 및 클래스 멤버에만 적용
-
[internal 접근]은 해당 모듈의 모든 소스 파일 내에서 사용되지만, 해당 모듈 외부의 소스파일에서는
사용되지않도록 한다. 일반적으로 App이나 Framework의 내부 구조를 정의할 때 internal 접근을 사용한다.
※ 접근 제어를 생략하면 internal이 기본
- [Fileprivate 접근]은 해당 소스 파일 내에서만 사용가능
- [Private접근]은 블록과 동일한 파일에 있는 해당 선언의 extension으로 제한한다.
-
ex) open class var blue : UIColor { get }
ㄴ open : 모듈 외부까지(클래스에만 사용) 접근 가능 class : 클래스 프로퍼티
ㄴ 읽기 쓰기 가능한 프로퍼티는 정의 뒤에 {get set} 읽기만 가능한 프로퍼티는 정의 뒤에 {get}
public class HoClass{ fileprivate var name : String = "현호" //현재 소스 파일 내에서만 사용 가능 private func play() {} //현재 블럭 내에서만 사용 가능 func display(){} //접근제어를 생략하면 internal 이 기본이다. }
-