Class의 프로퍼티(property)
클래스 구성
프로퍼티, 초기화방법
스토어드 프로퍼티(Stored property)
컴퓨티드 프로퍼티(Computed property)
클래스구성, 프로퍼티
class human{
var age:Int = 100
var name:String = "noName"
func out(){
print("나이:\(age)세 , 이름:\(name)")
}
}
var Kim:human = human()
Kim.out()//나이:100, 이름:noName
|
cs |
클래스는 크게 프로퍼티[age, name]와 메서드[out()]로 구성되어 있습니다
이번 포스팅은 프로퍼티에 대해 포스팅 하도록 하겠습니다
프로퍼티는 두가지 종류가 있습니다.
- Stored 프로퍼티
- Computed 프로퍼티
프로퍼티 초기화
클래스를 객체화 시키려면 꼭 퍼로퍼티의 초기화 작업이 필요합니다
인스턴스를 생성할 때 프로퍼티를 초기화하지 않는다면 아래의 오류가 나타나게 됩니다
초기화 방법은 아래와 같습니다
- 변수선언과 동시에 데이터 할당
- 옵셔널타입 선언(nil값 할당)
- 클래스의 init() 생성자 활용
1)변수 선언과 동시에 데이터 할당
class human{
var age:Int = 100
var name:String = "noName"
func out(){
print("나이:\(age)세 , 이름:\(name)")
}
}
var Kim:human = human()
Kim.out()//나이:100, 이름:noName
|
cs |
2)옵셔널 타입으로 선언
class human{
var age:Int? //초기화하지 않아서 nil할당
var name:String! //초기화하지 않아서 nil할당
func out(){
print("나이:\(age)세 , 이름:\(name)")
}
}
var Kim:human = human()
Kim.out()//나이:100, 이름:noName
|
cs |
3)init() 생성자
class human{
var age:Int
var name:String
func out(){
print("나이:\(age)세 , 이름:\(name)")
}
init(age:Int, name:String){
self.age = age
self.name = name
}
}
var Kim:human = human(age:1, name:"Kim")
Kim.out()//나이:1, 이름:noName
|
cs |
init()생성자에 대한 자세한 포스팅은 아래링크에 있습니다
https://admd13.tistory.com/48?category=1230087
Stored property
Stored property는 우리가 일반적으로 알고 있는 프로퍼티 입니다
데이터를 대입할 때 까지 값을 유지하고 호출된 시점에 관계없이 일정한 값을 갖습니다
출력시 일정한 값을 갖습니다
computed property
단어 그대로 연산작업을 수행하는 프로퍼티 입니다
getter를 통해 자신의 값을 수정하고 setter로 다른변수의 값을 수정할 수 있습니다
프로퍼티를 호출?사용?할 때 마다 getter에서 연산된 값을 갖습니다
class Man{
var age: Int = 16
var kg_w: Double = 20.5
var lb_w: Double{
get{ //setter가 없으면 생략가능
return kg_w * 2.2
}
}
var job:String = "jobless"
func display(){
print("나이:\(age), 몸무게:\(kg_w)kg,몸무게\(lb_w)파운드 , 직업:\(job)")
}
}
var Kim: Man = Man()
Kim.display()
//나이:16, 몸무게20.5kg, 몸무게(파운드):45.1 파운드, 직업:jobless
print(Kim.kg_w)//17.5
print(Kim.lb_w)//38.5 getter호출
Kim.kg_w = 19.5
print(Kim.lb_w)//40.7 getter 호출
|
cs |
kg_w값에 따라 get 블럭에서 lb_w의 값이 정해집니다
위의 코드는 setter가 없기 때문에 get블럭을 아래와 같이 생략할 수 있습니다
var lb_w: Double{ return kg_w * 2.2 }
|
cs |
setter는 아래와 같이 사용할 수 있습니다
class Man{
var age: Int = 16
var kg_w: Double = 1.6
var lb_w: Double{
get{ //setter가 없으면 생략가능
return kg_w * 2.2
}
set(newValue){//인자는 변수와 같은 타입, newValue는 생략가능
kg_w = newValue + kg_w
}
}
var job:String = "jobless"
func display(){
print("나이:\(age), 몸무게:\(kg_w)kg,몸무게\(lb_w)파운드 , 직업:\(job)")
}
}
var Kim: Man = Man()
Kim.display()
//나이:2, 몸무게20.5kg, 몸무게(파운드):45.1 파운드, 직업:actor
print(Kim.age)//2
print(Kim.kg_w)//17.5
print(Kim.lb_w)//38.5 getter호출
Kim.lb_w = 1.0 //setter호출
print(Kim.kg_w)//18.5
print(Kim.lb_w)//40.7 getter 호출
|
cs |
lb_w에 값을 대입하면 lb_w의 set블럭이 실행됩니다 이 때 매개변수 newValue는 lb_w의 자료형과 동일합니다
setter에서 변경된 값은 실제 프로퍼티에도 반영되어 다른 프로퍼티의 값을 수정할 때 주로 사용됩니다
Kim.lb_w 에 1.0을 대입하면 newValue란 이름으로 setter인자로 넘어갑니다
매개변수 newVlaue가 기본이름이므로 '(newValue)' 는 생략이 가능합니다
참고자료
iOS프로그래밍기초(21-2학기)한성현교수님 강의 내용
'🍎iOS프로그래밍 > 오늘의 공부' 카테고리의 다른 글
Swift의 생성자 init()-Failable/Default/ Disignated/ iOS프로그래밍 (0) | 2021.10.02 |
---|---|
Swift의 메서드 [Instance method, type/class method] / iOS프로그래밍 (0) | 2021.10.02 |
Swift 클로저(Closure) 후행 클로저(trailing Closure) / iOS프로그래밍 (0) | 2021.10.01 |
Swift 일급객체(First-class object) 일급시민(First-class citizen) / iOS프로그래밍 (0) | 2021.10.01 |
Swift의 함수 형태 및 사용 / iOS프로그래밍 (0) | 2021.09.26 |
댓글