VesselWheel

구조체, 열거형, 클래스의 차이 본문

Xcode Study

구조체, 열거형, 클래스의 차이

JasonYang 2023. 10. 19. 13:14

ex06.playground.zip
0.02MB

import UIKit

 

/*

            구조체(struct)  열거형(enum) 클래스(class)

            값type         값type      참조type

 상속          X             X            O

extension     O             O            O

 

 */

 

// 구조체

struct Student{

    var name: String = "더조은"

    var age : Int = 30

    func displayName(){

        print(self.name)

    }

}

// 구조체 객체 생성하기 : new 를 사용하지 않음

var std1: Student = Student();

dump(std1)

 

// 멤버변수와 멤버함수에 접근하기

print(std1.name)

print(std1.age)

std1.displayName()

 

// 구조체의 값 복사하기: 할당연산자

let std2 = std1

dump(std2)

print(std2)

 

class Person{

    var name: String="스위프트"

    var age: Int = 22

    func displayName(){

        print(self.name)

    }

}

 

// 클래스의 객체 생성하기

var p1: Person = Person()

 

// __lldb_expr_112.Person

print(p1)

dump(p1)

print(p1.name)

print(p1.age)

p1.displayName()

 

// 클래스의 생성자 함수

// init()   : 객체가 생성될 때 자동으로 호출됨

//            구조체에 있음

// deinit() : 소멸자 함수 - 구조체에 없음

 

class WorkMan{

    // Optional 로 선언하지 않으면 바드시 초기화해야 함

    var name: String

    var age: Int

    // 초기화하지 않아도 되는 멤버변수는. Optional 로 선언함

    var nickName: String?

    

    // 생성자 함수를 사용해서 클래스 초기화하기

    //                   ㄴ 멤버변수를 초기화한다는 의미

    init(name: String, age: Int){

        self.name = name

        self.age  = age

    }

    // 소멸자 - 소멸시 자동으로 호출됨

    deinit{

        self.name = ""

        self.age = 0

    }

}

 

// 클래스의 객체를 생성하는 code = 생성자함수를 호출하는 code

var wm1 = WorkMan(name:"이순신", age:46)

print("wm1.name : \(wm1.name), wm1.age : \(wm1.age)")

wm1.nickName = "거북선선장"

 

// Optional Binding

if let nickName = wm1.nickName{

    print(nickName)

}

 

// 클래스 상속

// 부모클래스의 내용을 물려받아서 변형하거나 확장하는 것

//           ㄴ 멤버변수/멤버메소드

class Parent{

    var name: String = "부모"

    var age : Int = 40

    func displayName(){

        print(self.name)

    }

}

class Child: Parent{

    

}

var chd1 = Child()

print(chd1.name)

print(chd1.age)

chd1.displayName()

 

// 클래스의 getter/setter

class People{

    var name: String = "김동호"

    var korAge: Int = 32

    var engAge: Int{

        get{ // 멤버변수의 값을 읽을 때 자동으로 호출됨

            return korAge - 1

        }

        set (inputValue){ // 멤버변수에 값을 할당할 때 자동으로 호출됨

            korAge = inputValue + 1

        }

    }

}

var people1 = People()

print(people1.korAge)

print(people1.engAge)

people1.engAge = 40

print(people1.korAge)

print(people1.engAge)

 

 

// getter, setter 의 감시자 함수

struct Officer{

    var name: String = "로보캅"

    var age : Int  = 30 {

        // 감시자 함수

        willSet(newAge){ // 값 설정될 때 직전에 호출

            print("이전 나이 :",age)

            print("새 나이 :",newAge)

        }

        didSet(oldAge){ // 값 설정 직후에 호출

            print("이전 나이 :",oldAge)

            print("새 나이 :",age  )

        }

    }

}

var officer1 = Officer()

officer1.age = 40

 

'Xcode Study' 카테고리의 다른 글

protocol  (0) 2023.10.19
Optional Chainnig ()  (0) 2023.10.19
열거형 : Enum(Enumeration)  (0) 2023.10.19
Tuple  (0) 2023.10.19
구조체 배열  (0) 2023.10.19