불로구
[코틀린 기초] 13. 클래스(Class) <1> 본문
클래스
- 클래스는 객체가 가지고 있는 데이터와 동작방법을 나타내는 정보이다.
- 프로그램 설명서에 의해 클래스가 생성되고 메모리에 객체가 만들어지면 인스턴스화 된 것이라 볼 수 있다.
클래스 생성
- 클래스는 class라는 키워드를 사용한다.
우선 간단하게 클래스를 생성해보자
class Computer(var cpu:String, var graphic:String, var ram:Int){
override fun toString() = "cpu : $cpu , graphic : $graphic , ram : $ram"
}
Computer란 클래스를 생성하며 인자로 cpu, graphic, ram을 받았다.
toString을 오버라이딩하여 각가의 값을 출력해주었다.
val cpu1 = Computer("i5-8500", "gtx1080",16)
println(cpu1)
이렇게 cpu1이란 변수에 Computer를 할당하며 각가의 값을 넣어주었다.
println()을 통해 출력 시 오버라이딩된 toString()의 값이 출력된다.
이번에는 생성자를 통해 클래스를 생성해보자
class Computer2{
var cpu : String
var graphic : String
var ram : Int
constructor(cpu:String, graphic: String, ram: Int){
this.cpu = cpu;
this.graphic = graphic
this.ram = ram
}
override fun toString(): String {
return "cpu : $cpu , graphic : $graphic , ram : $ram"
}
}
자바를 해본사람이라면 알겠지만 키워드만 다를뿐 코틀린에도 생성자가 존재한다.
constructor를 통해 클래스 호출 시 각각의 값을 받아 this 키워드를 통해 전역변수에 할당한다.
val cpu2 : Computer2 = Computer2("i7-10400" , "gtx3060", 32)
println(cpu2)
출력은 역시나 똑같지만 여기서 다른점은 우리는 변수를 선언할때 타입을 지정해주었다.
ex) var num : Int = 10
여기서도 클래스는 타입이 되며 Computer2라는 타입을 지정해서 생성하였다.
이번에는 특정 값은 있어도되고 없어도되는 클래스를 만들어보자
class Computer3(var cpu:String, var graphic:String){
var ram : Int = 0
constructor(cpu: String, graphic: String, ram:Int):this(cpu,graphic){
this.ram = ram
}
override fun toString(): String {
if(this.ram > 0){
return "cpu : $cpu , graphic : $graphic , ram : $ram"
}else{
return "cpu : $cpu , graphic : $graphic , ram : 없음"
}
}
}
다음을 보면 Computer3를 생성 시 cpu와 graphic는 필수로 필요하지만 ram은 선택사항이다.
생성자를 보면 ram을 생성시 호출이되고, 생성자 옆에 : this(cpu, graphic)를 보면 인자로 받은 cpu와 graphic 값을
this키워드를 통해 클래스 키워드 옆에 생성자의 값에 할당한다.
val cpu3 : Computer3 = Computer3("i5-8400", "gtx3060")
val cpu3_s : Computer3 = Computer3("i7-8500", "gtx1080", 16)
println(cpu3)
println(cpu3_s)
Computer의 toString()을 오버라이딩한것을 보면 ram 값이 0이상일경우와 아닐경우 각각의 return값을 다르게했다.
다음은 위에 방법을 생성자 오버로딩을 통해 만들어보자
class Computer4{
var cpu : String = ""
var graphic : String = ""
var ram : Int = 0
constructor(cpu: String,graphic: String){
this.cpu = cpu
this.graphic = graphic
}
constructor(cpu: String, graphic: String, ram: Int){
this.cpu = cpu
this.graphic = graphic
this.ram = ram
}
override fun toString(): String {
if(this.ram > 0){
return "cpu : $cpu , graphic : $graphic , ram : $ram"
}else{
return "cpu : $cpu , graphic : $graphic , ram : 없음"
}
}
}
자바를 배웠다면 다음코드가 이해가 될것이다.
오버로딩이란 같은 이름의 메서드를 타입, 인자개수 등을 다르게 재정의하는 것을 의미한다.
2개의 constructor를보면 첫번째는 2개의 인자, 2번째는 3개의 인자를 받아 각각의 값을 할당한다.
val cpu4 : Computer4 = Computer4("i5-8500", "gtx1060", 16)
val cpu4_s : Computer4 = Computer4("i5-8500", "gtx1060")
println(cpu4)
println(cpu4_s)
'프로그래밍 > 코틀린' 카테고리의 다른 글
[Kotlin] - 계산기 코드 (0) | 2021.03.10 |
---|---|
[코틀린 기초] 14. 클래스(Class) <2> (0) | 2021.03.07 |
[코틀린 기초] 12. 반복문 (for, forEach) (0) | 2021.03.01 |
[코틀린 기초] 11. 컬렉션 (List, Set, Map) (0) | 2021.03.01 |
[코틀린 기초] 10. when 조건문 (0) | 2021.02.22 |