본문 바로가기
Swift

5. Class

by 루에 2015. 9. 30.
반응형

클래스 정의와 객체 생성


class ClassName {

    // to do

}


// 클래스 객체 생성

var cls = ClassName()



객체 비교


클래스에서 객체를 생성하면서 변수나 상수에 대입한다. 클래스는 value type인 숫나 문자열과 다르게 레퍼런스(Reference) 타입이다. 밸류 타입은 다른 변수나 상수에 대입하면 값을 복사하고 레퍼런스 타입은 값을 복사하지 않는다.


밸류 타입은 == 연산자를 이용해서 값을 비교하지만 같은 주소를 가지는 객체를 비교하려면 === 연산자를 사용한다.

var obj1 = ClassName()

var obj2 = obj1

var obj3 = ClassName()


obj1 === obj2   // true

obj1 === obj3   // false



프로퍼티


객체가 다루는 데이터는 프로퍼티로 정의한다. 프로퍼티는 클래스 내부에 변수나 상수를 선언하는 형태로 작성한다.


저장 프로퍼티(Stored Property)


프로퍼티는 클래스에 값을 저장하고 저장된 값을 얻어오는 용도로 사용하고, 이를 저장 프로퍼티라고 한다. 저장 프로퍼티는 초기값과 함께 선언하거나 옵셔널 타입으로 선언한다. 옵셔널 타입이 아니고 값을 설정하지 않은 저장 프로퍼티는 초기화 메소드에서 초기값을 설정하도록 작성한다.

// width, height 프로퍼티를 가지는 클래스

class Rectangle {

    var width = 0

    var height = 0

}


// 사용

var rect1 = Rectangle()

rect1.width = 1

rect1.height = 1


계산 프로퍼티(Computed Property)


프로퍼티에는 값을 저장하는 용도의 저장 프로퍼티와 값을 계산하는 용도의 계산 프로퍼티가 있다. 객체의 값을 얻어오고 설정하는 행위는 같지만, 클래스에 값을 저장하는 공간이 필요하면 저장 프로퍼티, get/set 코드로 값을 제공하고 설정하면 계산 프로퍼티다.

class Person {

    var birth : Int = 0

    

    var age : Int {

        get {

            // 파라미터 타입과 같은 타입의 반환

            return 2014 - birth

        }

        set {   // set(parameter)로도 사용 가능. 생략할 경우 암시적으로 newValue 사용

            birth = newValue

        }

    }

}


// Person 객체 생성 프로퍼티 접근

var person = Person()

person.birth = 1986

person.age  // 28


// 읽기 전용 계산 프로퍼티를 사용한 클래스

class Rectangle2 {

    var width = 10

    var height = 10

    

    // 읽기 전용으로 사용할 경우 get 작성할 있으며 get 선언을 생략할 있다.

    var isSquare : Bool {

        return width == height

    }

}


var rect2 = Rectangle2()

rect2.isSquare  // true, 계산 프로퍼티


// 읽기 전용으로 설정한 프로퍼티에 값을 설정하면 에러

rect2.isSquare = 10     // error



// 튜플을 이용한 계산 프로퍼티 사용

class Rectangle3 {

    var width = 0

    var height = 0

    

    var widthHeight : (Int, Int) {

        get {

            return (width, height)

        }

        set(newValue) {

            width = newValue.0

            height = newValue.1

        }

    }

}


var rect3 = Rectangle3()

rect3.widthHeight = (30, 20)    // set동작

rect3.widthHeight   // (30, 20) get동작










반응형

댓글