[Swift] typeMethod / instanceMethod

meredith·2021년 8월 24일
0

swift

목록 보기
5/8
class Student {
    
    var name: String = "unknown"
    
    var `class`: String = "Swift"
    
    class func selfIntroduce() {
        print("학생타입입니다.")
    }
    
    static selfIntroduce() {
    	print("type - static")
    }
    
    func selfIntroduce() {
        print("저는 \(self.class)반의 \(name)입니다. ")
    }
}

Student라는 클래스를 하나 만들었다.
클래스를 사용하기 위해선 instance를 만들어야하고, 그래야 사용 가능하다.

내가 헷갈렸던것은 method 앞에 붙는 키워드, class 와 static의 차이이다.

설명하자면,
instance를 만들지 않고도 사용 가능한 것들이다.
(다른 블로그에서 참고하여) 예를 들자면,
1. 강아지의 울음소리
2. 정사각형의 한 변의 길이를 받아 면적값 리턴
이는 따로 정의하지 않아도 다들 아는 사실이자, 당연한 것들이다.

이러한 것들은 굳이 instance를 만들지 않고도 사용가능하도록 class를 붙인다.
(일반 클래스 내부 메소드는 인스턴스명.메소드명 으로 명령하여 사용)

https://jiseobkim.github.io/swift/2018/10/05/swift_basic-타입-메소드-&-인스턴스-메소드.html
에서 본 class method의 장점은
통신, UIView가져오기 등등 따로 인스턴스를 만들지 않고 바로 바로 처리를 한 것,
특정 반복되는 뷰라던가, 인자값으로 받아서 통신을 하고 델리게이트 패턴을 이용해 반복적으로 일어나는것을 처리하였다.
인스턴스를 생성하면 이게 해제가 될지도 걱정을 안해도되고 (평소에도 잘안하긴했다..) 고로 ARC 걱정이 없을것 같다.

그렇다면, class 와 static의 차이점은?
오버라이딩이 가능하고, 불가능하고 차이이다.

class는 오버라이딩이 가능하고, static은 오버라이딩이 불가능하다.

특정 클래스를 상속받는 클래스에서 class func selfIntroduce를 오버라이딩한다면,

overide class func selfIntroduce() {
	print("typeMethod - class")
}

로 코드를 작성하면 오류가 생기지 않는다.

하지만, static 키워드가 붙은 method를 오버라이딩하려 한다면, 오류가 발생한다

profile
해보자고 가보자고

0개의 댓글