[Swift 문법] 메소드

!·2022년 8월 10일
0

Swift 문법

목록 보기
20/27

메소드

  • 다른 프로그래밍 언어들과는 다르게 스위프트는 구조체, 클래스, 열거형 등에서 메소드의 정의가 가능하다.

인스턴스 메소드

  • 구조체, 열거형에서 인스턴스 메소드를 정의할 때와 클래스 내에서 메소드를 정의할 때 차이가 있다.
  • 구조체나 열거형에서 프로퍼티의 값을 변경하는 메소드를 정의할 때는 mutating 키워드를 붙여야한다.
  • 참조타입인 클래스의 프로퍼티를 변경하는 것과, 값 타입의 열거형과 구조체에서 프로퍼티의 값을 변경하는 것은 차이가 있기 때문이다.
struct LevelStruct{
	var level: Int = 0
    {
    	didSet{
        	print("Level \(level)")
        }
    }
   
    mutating func levelUp(){
    	print("level up")
        level += 1
    }
    
    mutating func levelDown(){
    	print("level down")
        level -= 1
        if level < 0{
        	reset()
        }
    }
    
    mutating func jumpToLevel(to: Int){
    	print("jump to level \(to)")
        level = to
    }
    
    mutating func reset(){
    	level = 0
        print("level 0")
    }
}

mutating 키워드를 함수 앞에 붙이지 않는다면, 컴파일이 되지 않는다.


self 프로퍼티

  • 참조타입은 클래스의 경우에는 self 프로퍼티에 다른 인스턴스를 할당할 수 없지만, 값 타입인 구조체와 열거형 같은 경우에는 할당할 수 있다.
class LevelClass{
	var level:Int = 0
    
    func reset(){
    	self = LevelClass()
     }
 }
 
 struct LevelStruct{
 	var level: Int = 0
    
    func reset(){
    	self = LevelStruct()
    }
}

타입 메소드

  • 타입 메소드를 선언하는 방법은 두 가지이다.
  • static 을 통해 선언한 타입 메소드는 상속 후 재정의가 불가능하고, class 타입 메소드는 상속 후 재정의가 가능하다.
  • 타입 메소드의 내부에서 self 메소드는 해당 타입명 과 동일하며 Self 키워드와도 동일하다. 즉 self == 타입명 == Self 이다.
profile
개발자 지망생

0개의 댓글