언어/Kotlin

Kotlin : 클래스 (Class)

해리누나 2022. 9. 2. 12:07
728x90
반응형

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 인스턴스 내부 값들을 파라메터로 받으면 된다.

readContent()함수를 외부로

 

 

++ Named Arguments

 

 

 

출처:

내용 / 도움준 곳: 학교 교수님 (Christian Kohls) 강의

728x90
반응형

'언어 > 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