public class Person{
private String name;
public Person(String name){
this.name=name;}
//getter
public String getName(){return name;}
//setter
public void setName(String name){this.name=name;}
}
필드 쓰려면 객체.getName()
class Person(var String:name){}
//생성자 파라미터를 전역변수로 만듦과 동시에 getter,setter를 내부적으로 생성해줌
//이때 name필드는 private로 생성됨
필드 쓰려면 객체.name
//마치 name필드를 바로 갖다 쓰는것처럼 보이지만 내부적으로 getter가 호출된것.
class User {
var name: String = "" //프로퍼티 선언시 get,set자동생성
var address: String = "" //프로퍼티 선언시 get,set자동생성
val phone: Int = 0 //프로퍼티 선언시 get자동생성
constructor(name: String, address: String, phone: Int) {
this.name = name
this.address = address
//this.phone=phone :val프로퍼티는 값 변경 불가
}
}
class UserInfo {
var name: String = ""
set(value) {
if (value == "김연아")
field = "$value 는 천재입니다"
else field=value
}
//get()은 따로 변경하지 않음
var address: String = ""
set(value) {
if (value == "한국") {
field = "대한민국"
} else field = value
}
get() {
return "$field 에 거주하고 있습니다"
//println("$field 에 거주하고 있습니다") 불가능! 반드시 return문 작성
}
var phone: Int = 0
constructor(name: String, address: String, phone: Int = 321) {
this.name = name
this.address = address
this.phone = phone
}
}
fun main(args: Array<String>) {
val user1 = UserInfo("김연아", "한국")
println(user1.name)
//김연아 는 천재입니다
println(user1.address)
//대한민국 에 거주하고 있습니다
println(user1.phone)
//321
val user2 = UserInfo("홍길동", "서울")
println(user2.name)
// 홍길동
println(user2.address)
//서울 에 거주하고 있습니다
}
class TV2(val chnnels: List<String>) {
var onOrOff: Boolean = false
var currentChannel = 0
set(value) {
field = value
if (field > 2) {
field = 0
} else field = field
if (field < 0) {
field = 2
} else field = field
}
get() {
println("호출됨")
return field //get으로 불려나간다는건 어떤 값을 반환해야하니까 return해줘야됨
}
//field는 원래 있던 값이고 value는 새롭게 할당하는 값임
// 변수에 새로운 값 넣어서=value로 새로운 할당값 들어올때마다 set이 호출됨
//set{}안에다가 currentChnnel=value 할당하면 안됨!! 무한할당->set무한호출
//field에 value값을 넣어주면 set호출 안되고 값만 잘 들어감
var currentChannel = 0
set(value) {
currentChannel=value}
//이렇게 하면 할당아닐까? 안됨 무한루프빠짐
//currentChnnel에 value할당하면 또 다시 set실행됨 즉 value가 변수에 들어온다=set호출된다
//이러면 계~속 set호출되면서 currentChnnel에 무한히 할당되면서 set무한 실행
//할당될때 set{}코드블럭이 계속 실행되니까 무한반복
// }
fun switch() {
onOrOff = !onOrOff
if (onOrOff == true) {
println("TV 켜짐")
} else {
println("TV 꺼짐")
}
}
fun chnnelUp() {
currentChannel++
println(chnnels.get(currentChannel))
}
fun chnnelDown() {
currentChannel--
println(chnnels.get(currentChannel))
}
}
fun main(args: Array<String>) {
var tv = TV2(listOf<String>("K", "M", "S"))
tv.switch()
tv.chnnelUp()
tv.chnnelUp()
tv.chnnelUp()
tv.chnnelUp()
tv.chnnelUp()
tv.chnnelUp()
}
참고
https://hongku.tistory.com/347
https://ddolcat.tistory.com/577
get, set에 대해 명료하게 알게 됐네요 ㅎㅎ
좋은 글 감사합니다 :)