1. 클래스 사용 예시

 

class Name {
    var name : String = "Kim"
    
    func myname() {
        print("my name is \(name)")
    }
}

let minJi : Name = Name()
print(minJi.name)
minJi.myname()

minJi.name = "Lee"
minJi.myname()

 

 

 

 

 

2. class 내의 function을 좀 더 복잡하게 만들어보기 예시

 

이해가 안된다면 함수 개념 다시 잡으러 가기 : https://growingsaja.tistory.com/774

 

class Name {
    var name : String = "Kim"
    
    func myname(name2:String) -> String {
        return "my name is \(name) \(name2)"
    }
}

let minJi : Name = Name()
print(minJi.name)
print(minJi.myname(name2:"Minji"))

minJi.name = "Lee"
print(minJi.myname(name2:"Minji"))

 

 

 

 

 

3. 클래스 상속 (inheritance)

 

class Name {
    var name : String = "Kim"
    
    func myname(myName2:String) -> String {
        return "my name is \(name) \(myName2)"
    }
}

class YourName : Name {
    var yourName = "Lim"
    func ourName(myName2:String, yourName2:String) {
        print("My name is \(name) \(myName2) and your name is \(yourName) \(yourName2)")
    }
}

let minJi : YourName = YourName()
print(minJi.name)
print(minJi.myname(myName2:"Minji"))

minJi.name = "Lee"
print(minJi.myname(myName2:"Minji"))
minJi.ourName(myName2:"Minji", yourName2:"Jinho")

 

 

 

 

 

4. 클래스 초기화 (initialization)

 

class Name {
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    func my_name() {
        print("my name is \(name) and \(age) year's old")
    }
}

let name1 : Name = Name(name: "Kim", age: 24)
let name2 : Name = Name(name:"Hong", age: 19)

name1.my_name()
name2.my_name()

 

 

 

 

 

5. 구조체 (Structure) 기본 예시

 

구조체의 기본 예시는 class와 동일합니다.

코드에서 Class를 Structure로 바꾼 것 이외 다른 점이 없습니다.

 

 - 예시1

struct Name {
    var name : String = "Song"
    var age : Int = 24
    
    func myName() {
        print("my name is \(name) and I'm \(age) years old.")
    }
}

var name1 : Name = Name()
print(name1.name)
print(name1.age)
name1.myName()

 - 예시2

struct Name {
    var name : String = "Kim"
    var age : Int = 22
    
    func myName(name2:String) -> String {
        return "My name is \(name) \(name2), and I'm \(age) years old."
    }
}

var sample : Name = Name()

print(sample.name)
print(sample.age)
print(sample.myName(name2:"Minji"))

 

 

 

 

 

6. 클래스와 구조체의 차이점 (Difference between Class and Structure) 정리

 

  A. 구조체는 클래스와 달리 init 없이 자동으로 초기화를 합니다.

  B. 구조체에서는 상속이 불가능하지만 클래스에서는 상속이 가능합니다.

  C. 구조체는 값 타입이지만 클래스는 참조 타입입니다.

  D. 타입 캐스팅은 클래스의 인스턴스에만 허용할 수 있습니다.

  E. 디이니셜라이저는 클래스의 인스턴스에만 활용 가능합니다.

  F. 참조 횟수 계산(Reference Counting)은 클래스의 인스턴스에만 적용합니다.

 

 - 아래 문항부터는 차이점에 대한 샘플 설명입니다.

 

 

 

 

 

7. "6-A. 구조체는 클래스와 달리 init 없이 자동으로 초기화를 합니다." [구조체 초기화 (structure initialization)]

 

Structure는 자동으로 초기화가 됩니다. 그래서 init을 사용할 필요가 없습니다.

클래스와 달리 구조체는 구조체 멤버를 패러미터 네임으로하여 스위프트가 자동으로 초기화 코드를 만들어 줍니다.

 

init을 사용할 수 있지만 사용하지 않는 것이 더 좋습니다.

 

struct Name {
    var name : String
    var age : Int = 22
    
    func myName(name2:String) -> String {
        return "My name is \(name) \(name2), and I'm \(age) years old."
    }
}

var sample : Name = Name(name:"Lee")

print(sample.name)
print(sample.age)
print(sample.myName(name2:"Minji"))

 

struct Name {
    var name : String
    var age : Int
    
    func myName(name2:String) -> String {
        return "My name is \(name) \(name2), and I'm \(age) years old."
    }
}

var sample : Name = Name(name:"Lee", age:19)

print(sample.name)
print(sample.age)
print(sample.myName(name2:"Minji"))

 

 

 

 

 

8. "6-C. 구조체는 값 타입이지만 클래스는 참조 타입입니다."

 

struct Str_ex {
    var a : Int = 5
}

class Cla_ex {
    var a : Int = 5
}

var str_1 : Str_ex = Str_ex()
var cla_1 : Cla_ex = Cla_ex()

var str_2 = str_1
var cla_2 = cla_1

str_1.a = 10
cla_1.a = 10

// Structure는 값 타입이기 때문에 변화가 없음! 그래서 백업 효과가 있음
// Classsms 참조 타입이기 때문에 함께 다 변함! 그래서 백업 효과가 없음
print("str_2 >>> before: 5, after: \(str_2.a)")
print("cla_2 >>> before: 5, after: \(cla_2.a)")

 

 

 

 

 

9. "D. 타입 캐스팅은 클래스의 인스턴스에만 허용할 수 있습니다."

 

 - 타입 캐스팅 예시

class MediaItem {
    var name: String
    init(name: String) {
        self.name = name
    }
}

class Movie: MediaItem {
    var director: String
    init(name: String, director: String) {
        self.director = director
        super.init(name: name)
    }
}

class Song: MediaItem {
    var artist: String
    init(name: String, artist: String) {
        self.artist = artist
        super.init(name: name)
    }
}

let library = [
    Movie(name: "Kim", director: "Jinho"),
    Song(name: "Moon", artist: "Sunghun"),
    Movie(name: "Lee", director: "Minji"),
    Song(name: "Hong", artist: "Sanghun"),
    Song(name: "Choe", artist: "Yonghyun")
]

var movieCount = 0
var songCount = 0
var mediaItemCount = 0
for item in library {
    if item is Movie {
        movieCount += 1
    } else if item is Song {
        songCount += 1
    }
    if item is MediaItem {
        mediaItemCount += 1
    }
}

print("movie is \(movieCount) and song is \(songCount), media is \(mediaItemCount).")

 

 

 

 

+ Recent posts