내부 변수를 변경하는 메서드를 포함하지 않는 struct
struct Song { let title: String let singer: String let year: Int func printLyrics() { print("bla bla blar ...") } |
let song1 = Song(title: "Friend", artist: "Taylor Swift", year: 2012) let wings = Song(title: "Wings", artist: "BTS", year: 2016) print(song1.title) print(wings.artist) song1.printLyrics() wings.printLyrics() |
내부 변수를 변경하는 메서드를 포함하는 struct
struct Song { let title: String let singer: String var year: Int func changeYear(newYear: Int) { year = newYear } } |
build 에러 발생 -> changeYear 에서 맴버 변수를 변경하려 하기에 |
struct Song { let title: String let singer: String var year: Int mutating func changeYear(year: Int) { self.year = year } } |
mutating 키워드로 문제해결 파라미터와 멤버 변수의 이름이 같을 경우 멤버변수에 반드시 self 추가 |
struct Song { let title: String let singer: String private var year: Int mutating func changeYear(year: Int) { self.year = year } } |
private 외부에서 멤버 변수를 액세스를 제한하고자 하는 경우 |
struct School { static var studentCount = 0 static func add(student: String) { print("\(student) joined the school.") studentCount += 1 } } |
static 멤버 변수, 메서드의 액세스 -> School.add(student: "Taylor Swift") -> print(School.studentCount) School 의 모든 인스턴스는 값을 공유하게 된다. |
struct 가 인스턴스(선언)화 될시에는 모든 멤버 변수는 값을 가지고 있어야 한다.
struct Employee { var name: String var yearsActive = 0 } |
let roslin = Employee(name: "Laura Roslin") let adama = Employee(name: "William Adama", yearsActive: 45) |
이니셜라이져 정의
struct Employee { var name: String var yearsActive = 0 init() { self.name = "Anonymous" } } |
더이상 아래와 같은 초기화는 불가 아래는 OK let roslin = Employee() |