[Kotlin] 데이터 클래스(data class)의 장점

2022. 12. 22. 12:00·컴퓨터 언어/Kotlin
728x90

 

코틀린 클래스에는 데이터 클래스라는 것이 존재한다.

 

주로 데이터들의 집합을 표현하기 위해서 사용한다.

 

예를 들어 학생의 정보를 학번, 이름으로 표현한다고 하면 일반적인 클래스의 경우 다음과 같이 사용한다.

 

class Student(number : String, name : String){
    var sNumber = number
    var sName = name
}
동등성 

 

아래와 같이 두 Student 인스턴스를 생성하자.

 

    val s1 = Student("123","chulsoo")
    val s2 = Student("123","chulsoo")
    println(s1==s2)

위 코드의 결과는 False이다. 프로퍼티의 값은 같으나 결과적으로 서로 다른 객체이기 때문이다.

 

즉 "=="연산은 동일성을 체크하는 것이다. (아예 같은 객체)

 

그래서 일반 클래스에서 동등성 비교를 위해서는 추가적인 작업이 필요하다.

 

여기서 데이터 클래스를 쓰는 이유가 나타난다.

 

데이터 클래스는 "==" 연산이 기본적으로 동등성을 의미한다. (다른 객체여도 값이 같음)

 

먼저 데이터 클래스는 다음처럼 인자에 val을 붙여 파라미터로 만드는 방식으로 사용한다.

data class Student(
    val number : String, val name : String
    )

 

    val s1 = Student("123","chulsoo")
    val s2 = Student("123","chulsoo")
    println(s1==s2)

위의 결과는 값이 같기 때문에 true이다.

 

toString

 

데이터 클래스의 또 하나의 장점으로는 자동으로 toString을 구현해준다.

 

데이터 클래스를 사용할 때

    val s1 = Student("123","chulsoo")
    val s2 = Student("123","chulsoo")
    println(s1)
    //Student(number=123, name=chulsoo)

데이터 클래스를 사용하지 않을 때

    val s1 = Student("123","chulsoo")
    val s2 = Student("123","chulsoo")
    println(s1)
    //Student@16b98e56

일반 클래스에서 동등성을 표현하고 싶다면 equals와 hashCode 함수를 오버라이딩하여 커스텀 해야하고 객체의 정보를 출력하고 싶다면 toString 함수를 오버라이딩 해야한다.

 

이럴 때 데이터 클래스를 사용하면 자동으로 해준다.

 

구조 분해 선언

데이터 클래스의 프로퍼티들을 구조 분해 선언으로 간단하게 꺼내올 수 있다.

 

    val s1 = Student("123","chulsoo")
    val s2 = Student("123","chulsoo")
    val (number, name) = s1
    println("$number $name")

꺼내오지 않고 싶은 프로퍼티가 있다면 _을 사용하면 된다.

 

    val s1 = Student("123","chulsoo")
    val s2 = Student("123","chulsoo")
    val (_, name) = s1
    println(name)
    // number를 건너 뛰고 name만 가져온다.

 

꺼내오지 않고 싶은 프로퍼티가 마지막 프로퍼티라면 그냥 생략해도된다.

 

 

요약

데이터 클래스의 장점

1. 동등성 비교
2. toString
3, 구조 분해 선언
728x90

'컴퓨터 언어 > Kotlin' 카테고리의 다른 글

[Kotlin] 영역 함수 (run, let, with, apply, also)  (0) 2022.12.21
[Kotlin] 고차 함수와 람다 함수  (0) 2022.12.20
[Kotlin] 클래스 사용법  (0) 2022.12.08
[Kotlin] try-catch문을 활용한 예외 처리 (finally)  (0) 2022.12.07
[Kotlin] 내포된 반복문과 레이블  (0) 2022.12.06
'컴퓨터 언어/Kotlin' 카테고리의 다른 글
  • [Kotlin] 영역 함수 (run, let, with, apply, also)
  • [Kotlin] 고차 함수와 람다 함수
  • [Kotlin] 클래스 사용법
  • [Kotlin] try-catch문을 활용한 예외 처리 (finally)
웅대
웅대
알고리즘과 백엔드를 중심으로 열심히 공부 중입니다! 같이 소통하며 공부해요!
    250x250
  • 웅대
    웅대 개발 블로그
    웅대
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • dp
        • 문자열
        • 정렬
        • 스택
        • 브루트 포스
        • 이진 탐색
        • 정리
        • 우선순위 큐
        • 자료구조
        • 그래프
        • 기타
        • 그리디
      • 컴퓨터 언어
        • Kotlin
        • Python
        • C#
      • 공부
        • Database
        • Android Studio
        • Algorithm
        • 컴퓨터 구조론
        • Spring
        • lombok
        • AWS
        • Network
        • OS
        • Git & GitHub
        • AI
        • Computer Vision
        • 보안
        • Nginx
        • 프론트
        • express
        • GCP
        • grokking concurrency
        • DevOps
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    bfs
    ChatPromptTemplate
    embedding
    스택
    AWS Lambda
    codetree
    nn.RNN
    code tree
    ci/cd
    다익스트라
    parametric search
    RNN
    푸쉬 알람
    influxDB CLI
    binary search
    파이썬
    Vector Store
    Merge
    스프링 OAuth2
    openvidu 배포
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[Kotlin] 데이터 클래스(data class)의 장점
상단으로

티스토리툴바