Data, Enum class

하승진·2024년 7월 29일
0
post-thumbnail

Data Class

: 데이터를 다루는 데에 최적화된 class로 5가지 기능을 내부적으로 자동으로 생성

5가지 기능

  • equals() : 내용의 동일성을 판단
  • hashCode() : 객체의 내용에서 고유한 코드를 생성
  • toString() : 포함된 속성을 보기쉽게 나타냄
  • copy() : 객체를 복사하여 똑같은 내용의 새 객체를 생성
    - 복사시 패러미터값이 없으면 똑같은 내용으로 생성
    • 파라미터 값이 있다면 해당 파라미터를 교체하여 생성
      val a = Data("A", 7)
      val b = a.copy() -> ("A", 7)
      val c = a.copy("B") -> ("B", 7)
  • componentX() : 속성을 순서대로 반환

=> 이 함수는 사용자가 직접 호출하기 위한 함수가 아닌 배열이나 리스트에 데이터 클래스의 객체가 담겨있을 때 이 내용을 자동으로 꺼내 쓸 수 있는 기능을 지원하기 위한 함수들

일반 클래스로 만든 a는 equals()나 hashCode(), toString() 결과가 제대로 안나왔지만 Data class로 생성한 b 클래스는 잘 나오는 것으로 확인된다.

또한 Data 클래스 리스트의 경우 반복문을 통해 인덱스 a, b를 component1, component2라는 함수를 사용하여 순서대로 값을 불러오게 된다.

Enum Class

: 열거형의 줄임말
: 상태를 구분하기위한 객체들을 이름을 붙여 여러개 생성해두고, 그 중 하나의 상태를 선택하여 나타내기 위한 클래스
: enum 클래스 안의 객체들은 관행적으로 상수를 나타낼 때 사용하는 대문자로 기술
: enum의 객체들은 고유한 속성을 가짐

enum class Color (val number: Int) {
	RED(1),
    BLUE(2),
    GREEN(3);
    
    fun isRed() = this == Color.RED
}

이런 형태로 enum 클래스에 속성을 받도록 하면 각 객체들에 속성도 설정 가능하다.
또한 일반 클래스처럼 함수도 선언 가능한데, 그러기 위해서는 마지막 객체에 ";"을 넣어줘야 한다.

  • 여기서 함수 내 비교할 대상은 Color 자기자신이기 때문에 넣은 것이다.

state 변수의 SING 객체를 넣어주고, 출력하면 객체 이름이 반환되는 것을 알 수 있다.
그리고 SLEEP으로 설정 후 isSleeping함수 호출 시 State 클래스의 SLEEP과 비교하기 때문에 같음으로 true 반환한다.
마지막으로 EAT객체로 바꾼 후 State객체의 message 속성을 넣으면 해당 객체의 string 값이 반환되는 것을 알 수 있다.

profile
기어갈지언정 한 발자국씩이라도 가보자

0개의 댓글