클래스
class 클래스 이름: 부모 클래스 {
// 프로퍼티
// 인스턴스 메서드
//타입 메서드(클래스 메서드)
}
// 프로퍼티 부분은 클래스 내에 포함되는 변수와 상수를 정의한다.
// 인스턴스 메서드는 객체가 호출하는 메서드를 정의한다.
// 타입 메서드는 클래스가 호출하는 메서드를 정의한다.
- 클래스에 property 추가하기
- 프로퍼티는 초기값이 있어야 한다.
혹은 init을 이용해 초기화 하거나 옵셔널 변수(상수)로 선언해야한다.
- 프로퍼티의 종류는 저장 프로퍼티와 계산 프로퍼티가 있다.
class Hi{
var hi : Int // 변수 hi는 저장 프로퍼티이다.
}
class Twice{
var value : Int = 2
var twice : Double = 2.0
func display(){ // 인스턴스 메서드 선언
print("value = \(value), twice= \(twice)")
}
class func classMethod(){ // 타입 메서드(클래스 메서드) 선언
print("클래스 메서드")
}
static func staticClassMethod(){ // 타입 메서드(스태틱 메서드 선언
print("스태틱 클래스 메서드")
}
}
var yoo : Twice = Twice()
// yoo라는 인스턴스 생성, 클래스명 다음의 괄호엔
// 눈에 보이지 않는 default initializer를 나타낸다.
yoo.display() // value = 2, twice= 2.0
print(yoo.value) // 2
Twice.classMethod() // 클래스 메서드
Twice.staticClassMethod() // 스태틱 클래스 메서드
// 클래스 메서드와 스태틱 클래스 메서드는 새롭게 생성한 yoo 인스턴스가 아닌 클래스 Twice로 동작 할 수있다.
- 타입 메서드는 인스턴스 메서드와 같은 방법으로 선언 하지만 앞에 class나 static을 붙여서 선언한다.
- 클래스 메서드는 자식 클래스에서 override가 가능하다.
인스턴스 초기화 : init()
- init 메서드(생성자)의 구조
init() {
}
designated initializer
모든 프로퍼티를 다 초기화시키는 생성자
- 소멸자
- 인스턴스가 사라질 때 자동호출
-deinit{}
class Twice{
var value : Int = 2
var twice : Double = 2.0
func display(){
print("value = \(value), twice= \(twice)")
}
init(yourValue : Int, yourTwice : Double){
value = yourValue
twice = yourTwice
// designated initializer
}
}
// var yoo : Twice = Twice() // 오류
var yoo : Twice = Twice(yourValue:10, yourTwice:20.1)
yoo.display()
self
- 현재 클래스 내 메서드나 프로퍼티를 가리킬 때 메서드나 프로퍼티 앞에 self.을 붙인다.
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
// init내에서만 사용하는 지역변수 value와 현재 클래스에서 사용하는 프로퍼티인 self.value
self.twice = twice
// 생성자의 변수와 클래스 내의 프로퍼티와 이름이 같기 때문에 구분하기 위해서 반드시 self.을 사용해야한다.
}
}
var yoo : Twice = Twice(value:10, twice:20.1)
yoo.display()
계산 프로퍼티
- 저장 프로퍼티를 이용해서 계산한 프로퍼티이다.
- setter가 없을 시
class Twice{
var value : Int = 2
var twice : Double = 2.0
var man : Int { // 계산 프로퍼티 선언
//get{ setter가 없을 때엔 생략이 가능하다.
return value+1
// }
}
func display(){
print("value = \(value), twice= \(twice)")
}
init(value : Int, twice : Double){
self.value = value
self.twice = twice
}
}
var yoo : Twice = Twice(value:10, twice:20.1)
yoo.display()
print(yoo.man) // 11
class Twice{
var value : Int = 2
var twice : Double = 2.0
var man : Int { // 계산 프로퍼티 선언
get{
return value+1
}
set(manValue){
value = manValue + 2
}
}
func display(){
print("value = \(value), twice= \(twice)")
}
init(value : Int, twice : Double){
self.value = value
self.twice = twice
}
}
var yoo : Twice = Twice(value:10, twice:20.1)
yoo.display() // value = 10, twice= 20.1
print(yoo.man) // 11 getter호출
print(yoo.value) // 10
yoo.man = 3 // setter 호출
prinr(yoo.value) // 5
- setter가 있으면 get{}이 생략 불가능하다
- setter의 매개변수명이 기본으로 newValue 인데 만약 매개변수를 newValue로 사용한다면 (newValue)를 생략 할 수있다.
set{ //set(newValue){ -> (newValue)생략가능
value = newValue + 1
}
method overloading : 생성자 중첩
- 같은 이름의 메서드를 여러가지 생성할 수 있다.
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
}
init(value : Int){
self.value = value
}
}
var yoo : Twice = Twice(value:10, twice:20.1)
var yoo2 : Twice = Twice(value:20)
yoo.display() // value = 10, twice= 20.1
yoo2.display() // value = 20, twice= 2.0