클래스

황승현·2023년 12월 7일
0

코틀린 강의 정리

목록 보기
14/36

클래스

프로그램의 각 요소별 설계도 역할

  • 코틀린에서는 class 키워드를 활용해서 클래스를 만든다.

  • 클래스에는 정보(프로퍼티)와 행위(메서드)를 작성.

  • 보통 하나의 파일은 한개의 클래스를 의미하지만, 하나의 파일안에 여러개의 클래스가 존재할 수도 있다.

  • 클래스 구조

    class 클래스이름 {
            정보1
            정보2
    
            행위1
            행위2
    }

(1) 데이터 클래스(Data Class)

  • 정보(프로퍼티)만 가지고 있는 클래스 구성할 때 사용
  • 기본 생성자에 1개 이상의 매개변수가 변수나 상수로 존재해야 함
  • 메서드 자동으로 만들어 줌
    • hashCode(): 객체를 구분하기 위한 고유값을 리턴
    • eauals(): 동일한 객체인지 비교해서 true 또는 false를 리턴
    • copy(): 현재 객체의 모든 정보를 복사해서 새로운 객체를 리턴
    • toString(): 현재 객체의 모든 정보(프로퍼티)를 출력
    • getXXX()/setXXX(매개변수): 변수의 값을 리턴하거나 설정
  • 데이터 클래스 기본 구조
    data class 클래스이름 {
                정보1
                정보2
    }

(2) 실드 클래스(Sealed Class)

  • 클래스 상속과 관련된 개념

  • 상속받을 수 있는 자식 클래스를 미리 정의

  • 무분별한 상속 방지

  • 컴파일 시점에서 생설할 수 있는 자식을 알 수 있기 때문에 효율적으로 다형성 구현

  • 실드 클래스 기본 구조

sealed class 부모클래스 {
	class 자식클래스1 : 부모클래스생성자
	class 자식클래스2 : 부모클래스생성자
}

(3) 오브젝트 클래스(Object Class)

  • Java의 static 대신 사용하는 키워드.
  • 프로그램을 실행함과 동시에 인스턴스화
  • class를 만들었다고 해서, 바로 메모리에 올라가는 게 아닌데, 클래스에 Object 키워드를 붙이면 바로 메모리에 올라감

(4) 열거 클래스(Enum Class)

  • 여러 곳에 동일한 상수를 정의하거나, 상수 외부에 관련된 변수나 함수를 정의하면 코드가 늘어날수록 관리가 어렵다.

  • enum class를 사용하면 상수값에 대한 관리 지점을 줄일 수 있다.

  • Comparable 인터페이스를 구현하는 추상 클래스

enum class 클래스1 {
    C, JAVA, KOTLIN
}

enum class 클래스2(val code: Int) {
    C(10),
    JAVA(20),
    KOTLIN(30)
}

fun main() {
    println(클래스1.C.toString()) // 출력: C
    println(클래스2.KOTLIN.code) // 출력: 30
    println(클래스2.KOTLIN.name) // 출력: KOTLIN
}

enum은 변수명으로 사용이 가능한 soft keyword다.

class 앞에 붙을 경우에만 특별한 의미를 가진다.

fun main() {

    var enum = 10

    val myColor = Color.RED
}

enum class Color{
    RED, BLUE, YELLOW
}

enum class도 프로퍼티나 메소드를 정의할 수 있다.

enum 클래스는 단순히 값만 열거하는 존재가 아니다.

enum 클래스에서도 일반적인 클래스와 마찬가지로 프로퍼티와 메소드를 지정할 수 있다.

fun main() {
    println(Color.ORANGE)
    println(Color.RED.rgb())
}

enum class Color(val r: Int, val g:Int, val b:Int){ //상수 프로퍼티를 정의한다.
    //상수를 생성할 때, 그에 대한 프로퍼티 값 지정
    RED(255,0,0), ORANGE(255,165,0); //세미콜론(;)을 반드시 붙인다.

    fun rgb() = (r*256+g)*256+b //메소드 정의
}

참고자료

https://kotlinlang.org/docs/classes.html#companion-objects
https://kotlinlang.org/docs/classes.html

0개의 댓글