GDSC HUFS 4기/Kotlin Team #3

[3팀] 멤버변수, 세터/게터, 데이터 클래스, 상속

FirstSong 2022. 11. 16. 01:22

 

이 글은 유데미 강의 Android 12 및 Kotlin 개발 완전 정복을 참고하여 작성하였습니다.

작성자 : 송가현

개발환경은 Windows, Android Studio입니다. 

 

 

1. 멤버변수

프로퍼티라고도 한다. 

다음과 같이 작성할 수 있다.

fun main(){
	
	var denis =Person("Denis", "Panjuta",31)
    denis.hobby="to skateboard"
    denis.age=32
    println("Denis is ${denis.age} years old")
    denis.stateHobby()
    var john=Person()
    john.hobby="play video games"
    john.stateHobby()


}

class Person(firstName: String="John", lastName: String="Doe"){

	var age:Int?=null //요기~!
    var hobby:String="watch Netflix"
    var firstName: String?=null
    
    //Initializer Block
    init{
    this.firstName=firstName
    	println("Initialized a new Person object with"+"firstName = $firstName and lastName=$lastName")
    }
    
    //Member secondary Constructor
    constructor(firstName: String, lastName:String, age:Int ):this(firstName,lastName){
    	this.age=age
        println("Initialized a new Person object with"+"firstName = $firstName and lastName=$lastName and age=$age") 
    
    }
    
    fun stateHobby(){
    	println("$firstName\'s hobby is $hobby")
    }
    //Member functions


}

 

 

 

 

 

2. 세터, 게터

코틀린에서 Setter Getter 은 자동으로 생성되어 사용이 된다. 

단, 원하는 값으로 이것들을 이용하기 위해서는 custom을 쓰는데

Custom Getter / Custom Setter의 개념도 존재함을 알 수 있다.

class Car(){
	val Brand:String="BMW"
    get(){
    	return field.toLowerCase()
    }

}

#위가 원하는 것으로 custom한 setter 형식

#아래는 원하는 것으로 custom한 getter 형식

class Car(){
	var maxSpeed:Int=250
    set(value){
    	field=if(value>0)value else throw illegalArgumentException("Maxspeed cannot be less than 0")
        
    }


}

Private set은 클래스의 외부에서는 set을 할 수 없다. 클래스 내부에서만 set 가능.

만약, 외부에서 set했다면 에러가 발생한다.

 

보조생성자라는 것도 있다. 클래스 안에서 다음과 같이 선언한다.

constructor(firstName: String, lastName: String, age:Int):
this(firstName, lastName)

3. 데이터 클래스

data class User(val id:Long, var name:String)

 

데이터 클래스의 형태이다. 

* getter, setter 디폴트로 생성 해준다.

 

4. 상속

클래스의 기능을 확장하고자 할 때, 상위 클래스에서 기능은 다 가져오고,

하위 클래스의 기능만을 따로 추가할 수 있음.

Any 클래스는 any 클래스에서 상속받는다.

 

상위 클래스( Super Class, Parent Class, Base Class )

하위 (상속받는) 클래스( Sub Class, Child Class, Derived Class) 라고 한다.

 

 

Open 한정자를 사용해 상속을 허용한다. -> open을 선언해야 자식 클래스가 참조해 사용할 수 있다.

EX)

Open class Beginner{

  open fun attack(monster: Monster){

  monster.hp-=10

  }

}

이를 참조해 사용할 때 다음과 같이 구현 (오버라이딩)  : var 형태도 override 적어주기

override fun attack(monster: Monster) {

  super.attack(monster!!)

   }

}