[Swift] instance , type 메서드 차이와 class , struct , enum 차이

2023. 6. 11. 16:42Swift 이해/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