[Java/Kotlin] data class, sealed class, enum class

Jay·2021년 3월 13일
0

Java&Kotlin

목록 보기
25/30
post-thumbnail

data class

data class(
	val a : String,
    	val b : int
)

대략 이런 형태로 쓰인다.
데이터를 저장하는 클래스(DTO, VO)를 쉽게 만들 수 있다.

  1. Property 자동 생성해준다.
  • var, val이 쓰여진 변수들의 getter, setter들을 자동으로 만들어준다.
  1. componentN()
  • component 함수를 작성해준다.
  • 객체의 값을 여러 변수로 분리해서 사용하는 분리 선언을 할 때 component함수가 쓰인다.
  1. copy()
  • 객체를 복사할 때 일부 값을 변경하고 싶을 때 사용한다.
  1. toString, hashCode, equals 자동 오버라이딩
  • data class를 작성하면 최상의 클래스인 Any에서 작성된 메소드들을 자동으로 오버라이딩 된다.

사용 제약조건

  • 생성자는 최소 1개 이상의 파라미터를 받아야 한다.
  • 모든 prime 생성자는 val, var 이여야 한다.
  • 데이터 클래스로 추상, 실드 클래스 작성할 수 없다.
  • 데이터 클래스는 상속이 불가하다.

Enum class

  • 이름에 상수를 붙여주는 기능을 한다.
  • 고유한 값의 집합을 나타내는 타입을 모델링하는데 사용된다. (States, Modes, Directions...)
enum class Fruit{
	apple, banana
}
enum class Fruit(var var1 : Int, var var2 : Int){
    apple(10 ,20),
    banana(10 ,20)
}
  • enum클래스도 클래스의 일종이므로 상속, 익명으로 작성하는 것이 가능하다.
  • enum클래스의 값을 검색할려면 valueOf(), 모든 데이터를 가져오기 위해선 values()함수를 사용해서 호출한다.

sealed class

  • enum 클래스의 확장 형태이다.
  • enum class는 enum type에 속하는 값들이 제한되지만 각 enum constant는 유일한 단독 인스턴스로 존재한다.
    반면, sealed class의 subsclass는 여러 개의 인스턴스를 가질 수 있고 state를 가질 수 있다.
  • 클래스들을 묶은 클래스이다.
  • 상속의 사용을 제한한다.
sealed class  Expr{
    class Const(val number : Double) : Expr()
    class Sum(val e1 : Expr, val e2 : Expr) : Expr()
    object NotANumber : Expr()
}
  • sealed 클래스는 같은 sealed가 작성된 파일 상속이 가능하나 다른 파일에서 sealed 클래스 내부를 상속할 수 없다.

  • 주로 when 표현식과 함께 쓸 때, 모든 경우에 대한 동작을 구현할 수 있다면 나머지 경우에 대한 처리를 위한 else를 쓰지 않아도 되는 이점이 있다!
    즉, 위의 Expr은 Const, Sum, NotANumber가 아닌 이상 다른 타입의 값을 가지는 예외는 존재 하지 않는다.

  • sealed class는 abstract class이며 abstract 멤버를 가질 수 있다.

  • 생성자는 기본적으로 private이며 non-private 생성자를 가질 수 없다.

profile
developer

0개의 댓글