[Swift] instance , type 메서드 차이와 class , struct , enum 차이
2023. 6. 11. 16:42ㆍSwift 이해/Swift 이해하기
🟣 instance, class , static 메서드
class ExampleClass{
func instanceMethod(){
print("instance 메서드")
} // instance 메서드
class func classMethod(){
print("class 메서드")
} // class 메서드
static func staticMethod(){
print("static 메서드")
} // static 메서드
}
🔵 class메서드와 instance메서드 차이
let instance: ExampleClass = ExampleClass()
instance.instanceMethod() // Result : instance 메서드
ExampleClass.classMethod() // Result : class 메서드
instance메서드: 실체화 즉, 인스턴스를 생성해야 사용 가능합니다
class메서드 : 인스턴스 생성하지 않고 직접 호출 가능합니다
🟢 class메서드와 static메서드 차이
ExampleClass.classMethod() // Result : class 메서드
ExampleClass.staticMethod()// Result : static 메서드
class메서드와 static메서드는 타입 메서드라 부릅니다
타입 메서드는 위 코드처럼 인스턴스 생성하지 않고 직접 호출 가능합니다
그래서 이 코드에선 둘의 차이점을 찾을 수 없습니다
class메서드 : sub class에서 override가 가능합니다.
static메서드 : sub class에서 override 할 수 없습니다.
https://www.youtube.com/watch?v=ZMGNdrZaN1g&list=PLgOlaPUIbynoqbQw_erl3L2w7vfOTCtFD&index=34
공통점 : 메모리에 올리지 않고 사용할 수 있다
차이점 : static에는 final이라는 의미가 포함되어있어 오버라이드가 불가능함
🟡 struct란?
class : 공유해서 사용하는 개념. 참조하는 값이 바뀌면 기존 값도 바뀜!
struct : 복사해서 사용하는 개념. 참조하는 값이 바뀌어도 기존 값에는 영향이 없음!
사용처 : 데이터 모델에 주로 사용!
/* Value Type */
struct testStruct {
var name = ""
var age = 0
}
/* Reference Type */
class testClass {
var name = ""
var age = 0
}
🟠 class , struct , enum 의 차이
class | struct | enum | |
확장(extention) | O | O | O |
프로퍼티,메소드 | O | O | O |
상속 | O | X | X |
저장 프로퍼티 | O | O | X |
초기화(init) 함수 | O | O | X |
타입 메소드 | O | X | X |
타입(Type) | reference | value | value |
메모리(Memory) | heap | stack | stack |
코드로 보는 reference타입과 value타입의 차이
//구초체 예제
struct exStruct {
var name: String = "구조체"
func hello() {
print("\(name)")
}
}
//구조체는 값 타입이기 때문에 let으로 하면 프로퍼티값 변경 불가
var stc: exStruct = exStruct()
stc.name = "구조체 입니다"
stc.hello()
//클래스 예제
class exClass {
var name: String = "클래스"
func hello() {
print("\(name)")
}
}
//클래스는 참조 타입이기 때문에 let으로 해도 프로퍼티값 변경 가능
let cls: exClass = exClass()
cls.name = "클래스 입니다"
cls.hello()
'Swift 이해 > Swift 이해하기' 카테고리의 다른 글
객체지향 프로그래밍(Object-Oriented Programming, OOP) (0) | 2023.05.21 |
---|---|
Swift란? (0) | 2023.05.21 |