iOS 복습(3)

유재우·2022년 1월 10일
0

클래스

  • 클래스 선언하는 법
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
  • setter가 있을 시
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

22:03~27:59초까지의 내용입니다.

profile
끝없이 탐구하는 iOS 개발자 유재우입니다!

0개의 댓글