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).")
'Development > iOS' 카테고리의 다른 글
[Swift] 기본 문법 정리 10 : Mutating (0) | 2023.03.08 |
---|---|
[Swift] 기본 문법 정리 9 : 옵셔널(Optional)과 옵셔널 바인딩(Optional Binding), 옵셔널 체이닝(Optional Chaining), nil 병합 연산자(nil coalescing operator) (0) | 2023.03.06 |
[Swift] 기본 문법 정리 7 : 함수 function (0) | 2023.03.04 |
[Swift] 기본 문법 정리 6 : 집합 Set (0) | 2023.03.04 |
[Swift] 기본 문법 정리 5 : 반복문 for, while (0) | 2023.03.04 |