1. 클래스 Class
var currentGlass1Content = 40
val glass1Capacity = 150
var currentGlass2Content = 90
val glass2Capacity = 200
지금까지 잔의 필요한 데이터들을 변수에 저장해 왔다. (참고: https://bruders.tistory.com/19)변수 currentGlass1Content 와 glass1Capacity는 첫번째 잔에 속해있으며 curentGlass2Content와 glass2Capacity는 두번째 잔에 속해있는 변수들이다. 이런 하나의 범주에 속해있는 값들을 별도의 데이터 유형으로 정의하는 것이 더 현명할 것이다. 이는 클래스를 통해 해결이 가능하다.
코틀린의 Class는 해당 클래스의 객체에 대한 일반적인(공통적인) 구조를 정의한다. 이 클래스는 새로운 자료형을 정의하고 객체는 이런 클래스의 특정 표본이며 인스턴스라고도 한다. 클래스가 일반적인 구조를 정의하는 동안 객체는 해당 구조에 대한 특정 값을 저장한다.
우리 Glass 클래스에는 다음과 같은 속성들이 주어져야 할 것이다.
- 현재 컵 내용물의 양 | currentGlassContent
- 최대 허용 가능한 물의 양 | glassCapacity
Class 를 어렵게 생각하지 말고 , 간단하게 우리가 채워나가야 하는 일종의 양식(de: formular)으로 생각하면 편하다. 옆에 그림은 우리가 정의한 클래스인 Glass의 양식이다. 이제 이 클래스로부터 속성(Content, Capacity) 에 구체적인 값을 준 객체를 생성할 수 있게 된다.
class Glass{
var content: Int = 0
val capacity: Int = 0
}
fun main(){
val glass1 = Glass()
glass1.content = 40
glass1.capaticy = 150
val glass2 = Glass()
glass2.content = 90
glass2.capaticy = 200
}
위 코드를 보면 알 수 있듯이, 어떤 객체에 특정한 값을 넣어줄려면, 일단 그 객체를 먼저 생성해주어야 한다. 객체는 클래스 이름과 () 를 써서 생성이 가능하다 => Glass() . 코드를 보면, 각 속성에 값을 넣을 때마다 코드가 한 줄씩 추가되는 걸 볼 수 있는데, 이를 확연히 줄이는 것이 생성자 ( Constructor - function )를 통해 가능하다.
1. 5 생성자 Constructor
class Glass(var content, val capacity)
fun main(){
val glass1 = Glass(40,150)
val glass2 = Glass(90,200)
}
생성자를 사용함으로서 훨씬 코드가 간편해진 것을 볼 수 있다.
주 생성자(Primary constructor)
class Glass constructor(var content, val capacity)
class Glass(var content, val capacity)
// Constructor 키워드 생략
클래스 헤더에 선언한 생성자는 주 생성자다. 어노테이션이나 가시성 변경자가 없을 시 키워드 생략이 가능하다.
주 생성자 정의 방법
class Glass constructor(contentParameter: Int, val capacity: Int){
var content = 0
init {
content = if(contentParam <= capacity){
contentParameter
} else {
capacity
}
}
}
//잔 안 내용물이 넘쳐나지 않게 조정
class Glass(contentParameter: Int, capacityParameter: Int){
var content = contentParameter
val capacity = capacityParameter
}
class Glass(var content: Int, val capacity: Int)
class Glass(var content: Int, val capacity: Int){
var drinkName = "water"
}
이런식으로 클래스 내부에 추가적인 속성을 주는 것도 가능하다.
부 생성자(Secondary constructor)
부 생성자 (Secondary constructor)는 주 생성자와 다르게 클래스 본문 내에 정의되는 생성자이다.
class Glass(var content: Int, val capacity: Int){
constructor(part: Double, capacity: Int): this((part*capacity).to Int(), capacity)
}
물론 readContent() 함수 자체를 클래스 내에 포함시키지 않고 클래그 밖에 정의해 사용할 수도 있다.
그럴 경우 readContet 함수에 생성된 Glass 인스턴스 내부 값들을 파라메터로 받으면 된다.
⇩⇩⇩
++ Named Arguments
출처:
내용 / 도움준 곳: 학교 교수님 (Christian Kohls) 강의
'언어 > Kotlin' 카테고리의 다른 글
Kotlin : ArrayList (배열 + 리스트) (0) | 2022.09.07 |
---|---|
Kotlin : Objectreference (ft. Call by value) (0) | 2022.09.05 |
Kotlin : 객체 (Object) (0) | 2022.06.24 |
Kotlin : 함수 선언과 호출 (0) | 2022.06.18 |
Kotlin : 제어문 if 와 when (0) | 2022.06.17 |