[Daily Swift] 4일차

EunJi·2023년 9월 26일
0

Swift

목록 보기
6/6

Instance Method vs Type Method

Type vs Instance

// Type 생성
struct User {
	// property 선언
	let name: String 
}

// instance 생성
let eunji = User(name: "Eunji")
  • User라는 Type을 정의한 것
  • name: property
  • eunji: instance

Instance Method

struct User {
	let name: String // Property
    
    // instance Method
    func greet() -> String { Method
    	"Hello \(name)!"
    }
}
  • instance Method는 실체가 있어야 사용 가능하다!
// ERROR
User.greet()
  • 따라서, 이 상태에서는 사용 불가능!
  • 실체가 없는 상태에서 호출하는 것이나 다름 없음.

    설계도(Class, Struct ,Type) <-> 실체/물건(object, instance)

let eunji = User(name: "Eunji Choi")
eunji.greet()
  • eunji라는 실체를 만들어준 후에,
  • 설계도 내부의 함수를 eunji라는 실체에 적용시킬 수 있음.

Type Method

  • Static / Class으로 선언된 것!
  • 인스턴스 생성 없이 Type 이름만 알아도 호출 가능.
// 생성
struct User {
	let name: String
    
    static func sayHello() {
    	print("Hello")
    }
    
    class func sayBye() {
    	print("Bye")
    }
}
// 호출
User.sayHello()
User.sayBye()
  • 설계도만 있고 실체는 없지만, 아파트를 사고 팔수 있다.

Static vs Class

  • Static: override 불가능.
  • Class: override 가능.
class User {
	static func sayHello() {
    	print("Hello")
    }
    
    class func sayBye() {
    	print("Bye")
    }
}
// static override -> ERROR
class staticUser: User {
	override static func sayHello() // ERROR
}

// class override -> OK
class ClassUser: User {
	override class func sayBye() {
    	print("ByeBye")
    }
}

메서드의 멤버 접근 범위

Type Method

  • Static Type Property만 사용 가능.
class User {
	let name = "eunji"
    static let alias = "alice"
    
    static func sayHello() {
    	print(name) // ERROR
        print(alias) // OK
    }
}
  • Error 이유:
    • name: instance Member.
      따라서, instance가 생성될 때마다 메모리에 올라감.
      하지만, Type Method는 인스턴스 선언 필요 X 메서드임.

      인스턴스가 생성되어야만 저장 공간을 갖는 인스턴스 멤버(property, method)에 접근 불가능!

Instance Method

  • 인스턴스 멤버, 타입 멤버 모두 사용 가능.
  • 단, type 멤버는 Type을 알아야함!
class User {
	let name = "eunji"
    static let alias = "alice"
    
    func sayhello() {
    	print(name) // OK
        print(alias) // OK
    }
}

Instance Method: instance가 생성되어야만 접근 가능.
따라서, Instance Member에 접근 가능.
(Instance가 생성된 상태이므로, member도 모두 메모리에 올라갔을 것이므로)
Instance 생성 여부와 상관없이 Type만 알면 접근 가능한
Type Member에도 당연히 접근 가능!

정리

instance Method: instance가 생성되어야만 메모리 할당 받음.
-> instance Member, type Member 모두 접근 가능.
.
type Method
-> type Member 접근 가능.
-> instance Member 접근 불가능.
(instance가 생성되어야만 접근 가능하므로)


[참고]

https://yeongwoo-cho.tistory.com/133
https://babbab2.tistory.com/122
https://www.youtube.com/watch?v=mV3wZ0tM_bk

profile
말하는 감자

0개의 댓글