브래의 슬기로운 코딩 생활
클래스 (class) - 1 본문
클래스 vs. 객체 vs. 인스턴스
객체지향 용어 비교
객체 인스턴스
인스턴스(instance)
클래스란?
Swift 클래스 선언하기
class 새로운 클래스 이름 : 부모 클래스 {
// 프로퍼티
// 인스턴스 메서드
// 타입(type) 메서드(클래스 메서드)
}
클래스에 저장 프로퍼티(stored property) 추가하기
class Man{
var age : Int
var weight : Double // age, weight는 stored property
} //오류 - 초기값 없음
프로퍼티는 초기값이 있거나 옵셔널 변수(상수)로 선언
class Man{
var age : Int = 1 //stored property는 초기값이 있어야 함
var weight : Double = 3.5
}
class Man{
var age : Int? //stored property는 초기값이 있어야 함, nil
var weight : Double!
}
메서드 정의
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){ //인스턴스 메서드
print("나이=\(age), 몸무게=\(weight)")
}
}
인스턴스 만들고 메서드와 프로퍼티 접근
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
}
var kim : Man = Man()
kim.display() //인스턴스 메서드는 인스턴스가 호출
print(kim.age)
클래스(class or type) 메서드
클래스명.클래스메서드()
타입 메서드 또는 클래스 메서드는 클래스 레벨에서 동작
타입 메서드는 인스턴스 메서드와 동일한 방법으로 선언하지만 class나 static 키워드를 앞에 붙여서 선언
class키워드로 만든 클래스 메서드는 자식 클래스에서 override가능 함
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
class func cM(){
print("cM은 클래스 메서드입니다.")
}
static func scM(){
print("scM은 클래스 메서드(static)")
}
}
var kim : Man = Man()
kim.display() //인스턴스 메서드는 인스턴스가 호출
Man.cM() //클래스 메서드는 클래스가 호출
Man.scM() //클래스 메서드는 클래스가 호출
인스턴스 초기화하기 : init()
클래스, 구조체, 열거형(enum) 인스턴스가 생성되는 시점에서 해야 할 초기화 작업
인스턴스가 만들어지면서 자동 호출됨
init 메서드(생성자)
init() {
}
designated initializer
- 모든 프로퍼티(age, weight)를 다 초기화시키는 생성자
init()을 하나라도 직접 만들면 기본적으로 만들어지는 눈에 안보이는 default initializer는 사라짐
소멸자
- 인스턴스가 사라질 때 자동 호출
- deinit{}
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(yourAge: Int, yourWeight : Double){
age = yourAge
weight = yourWeight
} //designated initializer
}
//var kim : Man = Man() //오류
//init()을 하나라도 직접 만들면 default initializer는 사라짐
var kim : Man = Man(yourAge:10, yourWeight:20.5)
kim.display()
인스턴스 만들 때 클래스명 다음 괄호의 의미: init() 호출
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(yourAge: Int, yourWeight : Double){
age = yourAge
weight = yourWeight
} //designated initializer
}
//var kim : Man = Man() //init()호출 : 오류
var kim : Man = Man(yourAge:10, yourWeight:20.5)
//init(yourAge: Int, yourWeight : Double)호출
kim.display()
self
현재 클래스 내 메서드나 프로퍼티를 가리킬 때 메서드나 프로퍼티 앞에 self.을 붙임
아래 소스에서는 매개변수와 구분하기 위해 반드시 self.을 써야함
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight : Double){
self.age = age //프로퍼티 = 매개변수
self.weight = weight
}
}
var kim : Man = Man(age:10, weight:20.5)
kim.display()
'Class > Swift' 카테고리의 다른 글
extension, Swift 접근 제어 (access control, access modifier), 프로토콜(protocol)과 Delegate, 열거형 (enum) (0) | 2023.01.23 |
---|---|
클래스 - 2, failable initializer, 클래스(class) 상속 (2) | 2023.01.20 |
1급 객체(first class object), 1급 시민(first class citizen), 클로저(Closure) (0) | 2023.01.12 |
함수와 메서드(method) (2) | 2023.01.11 |
guard문, switch-case문 (0) | 2023.01.10 |