궁금한 내용을 검색해보세요!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
서근 개발노트
티스토리에 팔로잉
SWIFT/Grammar

Swift : 기초문법 [프로퍼티 #4-1 Static]

서근
QUOTE THE DAY

-
Written by SeogunSEOGUN

반응형

Static

static 프로퍼티 및 메서드의 일반적인 용도 중 하나는 전체 앱에서 사용하는 일반적인 기능을 저장하는 것입니다. 

staticstruct, enum에서 선언할 때 사용하고, class은 클래스나 프로토콜에서 사용합니다.

 

예를 들어, 폴은 Swift를 배우는 사람들을 위한 무료 iOS 앱인 Unwrap이라는 앱을 만듭니다. 이 앱에서 App Store의 앱 URL과 같은 몇 가지 일반적인 정보를 저장하여 앱이 필요한 곳이면 어디에서나 참조할 수 있습니다. 그래서 내 데이터를 저장하는 다음과 같은 코드가 있습니다.

struct Unwrap {
    static let appURL = "https://itunes.apple.com/app/id1440611372"
}

이렇게 해야 Unwrap.app 을 쓸 수 있습니다. 다른 사람이 앱에서 무언가를 공유할 때 URL이 제공되므로 또 다른 사람이 앱을 검색할 수 있습니다. static 키워드가 없으면 고정 앱 URL 을 읽기 위해 Unwrap struct 의 새 인스턴스를 만들어야 하는데, 그럴 필요가 없어지죠.

 

지금까지 생성한 모든 프로퍼티와 메서드는 구조체의 개별 인스턴스에 속했습니다.

즉, 아래 예제와 같이 Student 구조체가 있으면 각각 고유한 프로퍼티 및 메서드를 사용하여 여려 개의 Student 인스턴스를 만들 수 있습니다.

struct Student {
    var name: String
    
    init(name: String) {
        self.name = name
        
    }
}

let pho = Student(name: "포뇨")
let Sho = Student(name: "소스케")
let Seogun = Student(name: "서근")

또한, static 으로 선언하여 구조체의 모든 인스턴스에서 특정 프로퍼티 및 메서드를 공유하도록 Swift에 요청할 수도 있습니다.

 

이것을 사용해서 학생이 추가될 때 마다 카운트를 하는 프로퍼티를 만들어 보겠습니다.

struct Student {
    var name: String
    
    static var classSize = 0
    
    init(name: String) {
        self.name = name
        Student.classSize += 1
        
    }
}

let pho = Student(name: "포뇨")
let Sho = Student(name: "소스케")
let Seogun = Student(name: "서근")

classSize 프로퍼티는 struct 의 인스턴스가 아닌 struct 자체에 속하므로 Student.classSize를 사용하여 호출해야 합니다.

print(Student.classSize)
//3

예시

struct NewsStory {
        static var breakingNewsCount = 0
        static var regularNewsCount = 0
        var headline: String
        init(headline: String, isBreaking: Bool) {
            self.headline = headline
            if isBreaking {
                NewsStory.breakingNewsCount += 1
            } else {
                NewsStory.regularNewsCount += 1
            }
        }
    }
struct FootballTeam {
	static let teamSize = 11
	var players: [String]
}
struct Pokemon {
    static var numberCaught = 0
    var name: String
    static func catchPokemon() {
        print("잡았다!")
        Pokemon.numberCaught += 1
    }
}
Pokemon.catchPokemon()
print(Pokemon.numberCaught)
//잡았다.
//1

 

Static TEST :  문제를 풀려면 이곳을 클릭해주세요.

 

 

읽어주셔서 감사합니다🤟

 


잘못된 내용이 있으면 언제든 피드백 부탁드립니다.


서근


위처럼 이미지 와 함께 댓글을 작성할 수 있습니다.