TIL 20231223

2023. 12. 23. 14:00코틀린

코틀린 부분의 부족함을 채우기 위해서 추가적으로 강의를 들었는데, 

배운 이론에 대해 정리를 해보려고 한다.

 

여러 가지 클래스들을 정리할 수 있었다.

 

 

1. 데이터 클래스

데이터 전달을 위한 객체 DTO(Data Transfer Object)

  • 자바에서는 POJO(Plain Old Java Object)라고 불리기도 한다.
  • 구현 로직을 가지고 있지 않고 순수한 데이터 객체를 표현한다.
  • 데이터를 접근하는 게터/세터를 포함한다.
  • toString(), equals()  등과 같은 데이터 표현 및 비교 메서드 포함한다.

자바로 DTO를 표현하면

데이터 필드들, 게터/세터들, 데이터 표현 및 비교 메서드들을 모두 작성해야 한다.

 

코틀린으로 DTO를 표현하면

프로퍼티만 신경 써서 작성하면 나머지는 내부적으로 자동 생성된다.

 

코틀린의 데이터 클래스

DTO를 표현하기 적합한 클래스 표련으로 data class 키워드를 사용하여 정의한다.

 

 

자동 생성되는 메서드들

제공된 메서드0 기능
equals() 두 객체의 내용이 같은지 비교하는 연산자로 ==와 동일하다.
(고유값은 다르지만 의미값이 같을 때)
hashCode() 객체를 구별하기 위한 고유한 정수값 생성, 데이터 셋이나 해시테이블을 사용하기 위한 하나의 생성된 인덱스이다.
copy() 빌더 없이 특정 프로퍼티만 변경해서 객체 복사하기
toString() 데이터 객체를 읽기 편한 문자열로 반환하기
componentN() 객체의 선언부 구조를 분해하기 위해 프로퍼티에 상응하는 메서드이다.

 

  • 프로퍼티를 위한 게터/세터
  • 비교를 위한 equals()과 키 사용을 위한 hashCode()
  • 프로퍼티를 문자열로 변환해 순서대로 보여주는 toString()
  • 객체 복사를 위한 copy()
  • 프로퍼티에 상응하는 component1(),component2() 등

 

선언 예

data class Customer(var name: String , val email: String)

 

이런식으로 데이터 클래스를 작성해주면 된다.



데이터 클래스의 조건

  • 주 생성자는 최소한 하나의 매개변수를 가져야 한다.
  • 주 생성자의 모든 매개변수는 val, var로 지정된 프로퍼티여야 한다.
  • 데이터 클래스는 abstract, open, sealed, inner 키워드를 사용할 수 없다.

 

 

 

2. 내부 클래스

  • 중첩(Nested) 클래스
  • 이너(Inner) 클래스

자바의 내부 클래스 종류

종류 역할
정적 클래스(Static class) static 키워드를 가지며 외부 클래스를 인스턴스화 하지않고 바로 사용 가능한 클래스(주로 빌더 클래스에 이용)
 멤버 클래스(member class) 인스턴스 클래스로도 불리며 외부 클래스의 필드나 메서드와 연동하는 내부 클래스
지역 클래스(local class) 초기화 블록이나 메서드 내의 블록에서만 유효한 클래스
익명 클래스(anonymous class) 이름이 없고 주로 일회용 객체를 인스턴스화하면서 오버라이드 메서드를 구현하는 내부 클래스. 가독성이 떨어지는 단점이 있다.

 

자바와 코틀린의 내부 클래스 비교

자바 코틀린
정적 클래스(Static class) 중첩 클래스(Nested class): 객체 생성 없이 사용 가능
멤버 클래스(member class) 이너 클래스(Inner class): 필드나 메서드와 연동하는 내부 클래스로 inner 키워드가 필요하다.
지역 클래스(local class) 지역 클래스 (local class) : 클래스의 선언이 블록에 있다면 지역 클래스이다.
익명 클래스(anonymous class) 익명 객체 (anonymous object ) : 이름이 없고 주로 일회용 객체를 사용하기 위해 object  키워드를 통해 선언된다.

 

 

 

3.지역 클래스 (Local class)
특정 메서드의 블록이나 init 블록과 같이 블록 범위에서만 유효한 클래스이다.
블록 범위를 벗어나면 더 이상 사용되지 않는다.

 

익명객체

  • 자바에서는 익명 이너 클래스라는 것을 제공해 일회성으로 객체를 생성해 사용한다.
  • 코틀린에서는 object 키워드를 사용하는 익명 객체로 같은 기능을 수행한다.

 

 

 

4. 실드 클래스(sealed class)

  • 실드란 '봉인된' 이라는 의미로 무언가 안전하게 보관하기 위해 묶어 두는 것이다.
  • sealed 키워드를 class와 함께 사용한다.
  • 실드 클래스 그 자체로는 추상 클래스와 같기 때문에 객체를 만들 수는 없다.
  • 생성자도 기본적으로는 private이며 private이 아닌 생성자는 허용하지 않는다.
  • 실드 클래스는 같은 파일 안에서는 상속이 가능(다른 파일에서 상속 불가)하다.
  • 불록 안에 선언되는 클래스는 상속이 필요한 경우 open 키워드로 선언한다.

'코틀린' 카테고리의 다른 글

TIL 20240130 - 제네릭(Generic)  (0) 2024.01.30
TIL 20231230  (2) 2023.12.30
WIL 20231216  (0) 2023.12.16
TIL 20231215  (0) 2023.12.15
TIL 20231214  (2) 2023.12.14