본문 바로가기

프로그래밍 언어/코틀린_쌩초보를 위한 기초

쌩초보를 위한 기초_29_Class 종류

일반적인 클래스 외에 특정 기능을 가진 클래스들이 있다.

1. data class 데이터 클래스

일반적으로 클래스 안에는 속성과 동작이 있다.

그래서 속성은 property멤버로 선언하고 동작은 method멤버로 만든다.

그런데 특정 동작 없이 오직 데이터 저장을 위해 사용할 클래스라면 Data Class를 사용할 수 있다.

 

데이터 클래스는 오직 데이터 전달을 위한 클래스이다.

이렇게 특정 목적별로 이용할 수 있는 클래스로는 Sealed Class, Inner Class, Enum Class 등이 있다.

 

먼저 데이터 클래스에 대해 간단하게 알아본다.

 

데이터 클래스에서 data를 전달하는 객체가 필요하다.

이것을 DTO (Data Transfer Object)라고 한다.

DTO는 데이터를 주고 받을 때 사용하는 표준 형태를 가진다.

데이터를 전달하는데 유용한 여러 작업들이 있는데 코틀린에서는 그런 기본적인 기능을 가진 method를 데이터 클래스가 만들어지면 자동생성한다.

 

데이터 클래스 선언

 

data class Example(var name: String, var email: String)

 

데이터 클래스가 만족해야 하는 조건

 

  • 기본 생성자는 최소한 하나의 매개변수가 있어야 함
  • 매개변수는 val, var로 지정해야 한다.
  • abstract, open, sealed, inner 키워드를 사용할 수 없다.
  • 단, 필요하다면 보조 생성자나 init을 사용할 수 있다.

데이터 클래스가 자동으로 생성하는 메써드

 

  • property를 위한 getter / setter
  • 비교를 위한 equals()
  • key 사용을 위한 hashCode()
  • property를 문자열로 변환하는 toString()
  • 객체 복사를 위한 copy()
  • property에 상응하는 component1() , component2()

 

2. 중첩 클래스 (Nested Class)

 

클래스는 다른 클래스 안에 만들어져 포함될 수 있다.

이런 클래스를 중첩(Nested)클래스 라고 한다.

중첩 클래스는 외부 클래스의 property, method에 접근할 수 없다.

 

 

val test에 Outer클래스의 중첩 클래스에 있는 foo() 메써드의 값을 참조하여 넣을 수 있다.

객체를 생성하지 않고 직접 접근하고 있다.

 

외부 클래스에서 접근할 때는 객체를 생성한 후 접근할 수 있다.

또한 companion object에는 객체 생성없이 접근할 수 있다.

컴패니언 오브젝트는 고정된(static) 메모리를 가지고 있기 때문이다.

3. inner class (내부 클래스)

중첩클래스의 개념을 가진 inner 클래스라는 것도 있다.

inner를 붙여서 만든 중첩 클래스는 바깥 클래스 및 외부 클래스의 멤버에 접근할 수 있다.

 

 

inner 클래스는 foo() 메써드에 바깥 클래스인 Outer 클래스의 exam 변수값을 참조한다.

변수 test에 foo()를 참조하여 저장한 값은 1이다.

 

Anonymous Inner Class(익명 내부 클래스)는 1회용 객체를 생성할 때 사용하는데 코틀린에서는 object 키워드로 익명 객체를 만들수 있다. 다음 기회에 살펴보기로 한다.

 

4. 기타 클래스

 

그외 클래스들은 제목만 나열하고 기회가 있을때 자세하게 알아보기로 한다.

 

Sealed Class(봉인 클래스): 데이터를 묶어서 봉인하여 안전하게 보관하기 위해 사용

Enum Class(열거 클래스): enumeration(나열, 열거)의 준말을 쓰며 여러 개의 상수를 선언하고 조건에 따라 선택할 때 사용.

 

 

Annotation Class(주석 클래스): 프레임워크 제작에 주로 사용. 만들어진 주석클래스는 @와 함께 표기해서 코드에 부가 정보를 추가하는 역할 을 한다.