# data class

21개의 포스트
post-thumbnail

[Android] json file을 data class로 변환하기

0. 준비사항 Parcelize 플러그인 추가 app 단위의 build.gradle.kts에서 plugins 안에 id("kotlin-parcelize") 추가 Gson 라이브러리 추가 app 단위의 build.gradle.kts에서 dependencies 안에 implementation("com.google.code.gson:gson:2.8.9") 추가 1. assets 디렉토리 생성 File > New > Folder > Assets Folder 프로젝트 root 단위에 assets 디렉토리 생성 2. json 파일 생성 ![](https://velog.velcdn.com/images/paulus0617/po

2023년 8월 16일
·
1개의 댓글
·
post-thumbnail

[Kotlin] Data Class

이 포스트는 아래의 Android 공식 홈페이지에서 제공하는 Codelab을 기반으로 작성되었습니다. https://developer.android.com/codelabs/basic-android-kotlin-compose-generics?hl=ko#0 이 포스트는 이전 포스트의 예제를 이어서 진행한다. https://velog.io/@moonliam_/Kotlin-Generics-Data-Type-%EC%9D%BC%EB%B0%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9C%A0%ED%98%95 Question 클래스는 데이터만 포함하고 있는 클래스이고 작업을 실행하는 메소드가 존재하지 않는다. 이러한 클래스를 데이터 클래스(Data Class) 라고 정의할 수 있다. 특정 클래스를 Data Class로 정의하면 Kotlin 컴파일러에서 특정한 가정을 하여 toString() 및 기타 메소드가 자동으로 구현된다. ![](https:

2023년 7월 31일
·
0개의 댓글
·
post-thumbnail

[프로그래밍 기초 문법] kotlin - 메소드, 클래스, 생성자

1. 메소드 설계 . . . . main 메소드에서 myMathScore 변수에 입력값을 정수로 받는다. checkRank(myMathScore)는 결국 값이 된다. 변수 myRank에서 checkRank 메서드를 호출하며 파라미터로 숫자 요구한다. checkRank 메서드의 score 변수에 점수를 넘겨주면 checkRank는 비교 코드 실행. . . . . . 2. 클래스 설계 2-1. 클래스 구조 . . 2-2. 데이터 클래스 (data class) property 만 가지고 있는 클래스 기본 생성자에 1개 이상의 매개 변수가 변수나 상수로 존재해야함 . . 2-3. 실드 클래스 (sealed class) 상속받을 수 있는 자식클래스들을 미리 정의 무분별한 상속 방지 컴파일 시점에 생성할 수 있는 자식을 알 수 있어, 효율적으로 다형성 구현 . . 2-4. 오브젝트 클래스 (object cl

2023년 7월 28일
·
0개의 댓글
·

[AndroidRoadMap] Part 1. 개발 언어

Android 개발자라면, 혹은 개발자가 되고 싶다면 도구인 개발 언어를 기본부터 응용까지 잘 다룰 줄 알아야 합니다. 이 포스트는 Kotlin 언어와 관련해 아래 내용들에 대해 정리합니다. ⚠️ 개인 경험을 기반으로 적은 지식이므로 잘못된 내용이나 추가로 덧붙일만한 내용이 있다면 댓글이나 개인적으로 언제든 알려주세요! >Kotlin의 기본 특징 및 Java와의 비교 > >Q) null safety의 개념이란? > >Q) mutable과 immutable 컬렉션의 차이는 무엇이며 각각 언제 쓰는 게 좋은가? > >Q) [lateinit var와 lazy delegate의 차이와 각각의 장단점은 어떻게 되는가?](#lateinit-var와-l

2023년 7월 22일
·
1개의 댓글
·
post-thumbnail

Java - record class

record class 데이터 전용 클래스 순수하게 데이터를 보유하기 위한 클래스 불필요한 코드를 줄이고 간결한 코드 작성을 가능하게 해준다 DTO 클래스를 생성할 때 주로 사용 Java 14부터 도입, Java 16에서 정식 스펙으로 포함 코틀린의 데이터 클래스와 유사 주요 기능 생성자, 데이터 필드, 필드명을 딴 getter 메서드 자동 생성 불변성 보장 equals(), hashCode(), toString() 메서드 자동 생성 유의 사항 final, public 으로 선언 각 필드는 private final 필드로 정의 JPA entity 로 사용 불가 기존의 불변 데이터 객체 record 클래스를 이용한 불변 객체 코드가 훨씬 간결해진다

2023년 5월 8일
·
0개의 댓글
·

🤔 kotlin에서 Entity를 Data Class로 지정하면 안되는 이유

프로젝트를 개발하면서 Entity에 흔히 DTO에 쓰는 Data Class 사용해도 될까라는 의문이 들었다. Data Class는 데이터를 담을 때 사용하고, 유요한 copy(), equal(), toString() 같은 메서드들을 지원해주니까 사용해도 되겠지! 라는 생각이 들었지만 결론은 붙히면 안되는것을 깨닳았다. Data Class 일단 첫번째로 data class가 무엇인지 알아보자. Data Class는 일반 클래스와 달리, 위에서 말했다 싶이 데이터 보관 목적으로 만든 클래스이고, 다양한 메서드를 자동 생성해주는 클래스이다. Data Class 생성시 만들어지는 메서드로는 hashCode() copy() equal() toString() componentsN() 이렇게 있고, 또한 여러개의 특징을 가지고 있다. 기본 생성자에 1개 이상의 val, var를 붙힌 파라미터가 있어야한다. 다른 클래스를 상속할 수 없다. (sealed

2023년 4월 11일
·
0개의 댓글
·
post-thumbnail

코틀린 컬렉션

컬렉션 타입 코틀린 표준 라이브러리는 기본 컬렉션 타입인 List, Set, Map을 제공합니다. 또한 컬렉션은 두가지 종류로 나뉩니다. 불변 컬렉션(Immutable) : 읽기 전용 컬렉션 가변 컬렉션(Mutable) : 삽입, 수정, 삭제와 같은 쓰기 작업이 가능한 컬렉션 컬렉션 생성 방법 컬렉션을 생성할때 가장 일반적인 방법은 표준 라이브러리 함수를 사용입니다. Immutable List 생성 Mutable List 생성 Mutable 리스트에서 apply 메서드를 사용하면 가독성이 좋아집니다. Immutable Set 생성 Mutable Set 생성 Immutable Map 생성 코틀린의 Map에서는 to 라는 중위 함수로 key - value 구조를 전달합니다. Mutable Map 생성 코틀린에서는 map.put("key",value)보다 아래와 같은 문법

2023년 3월 14일
·
0개의 댓글
·

JPA Entity 심층탐구 (2) Kotlin으로 Entity를 작성하는 알맞은 방법

시작하며 지난 글에 이어서 이제는 그렇다면 어떻게 Entity를 적어야 하는지 알아보겠다. Kotlin으로 JPA Entity 작성하기 이 파트는 spoqa 기술 블로그에 올라온 남경호님의 "스포카에서 Kotlin으로 JPA Entity를 정의하는 방법" 글을 참고하여 작성하였다. 필요한 plugin 추가하기 Kotlin으로 JPA를 사용할 때 Entity에 allopen 옵션과 no-args constructor 옵션을 줘야한다. 이는 많은 자료들에서 찾아볼 수 있다.(위 링크에서도 나와 있음) 따라서 해당 작업을 먼저 해준다. PrimaryKeyEntity 앞 글에서 data class를 사용하지 않는 문제들 중 equal, hashcode가 적절치 않기 때문도 있었다. 이를 극복하기 위해 PrimaryKeyEntity라는 추상 클래스를 만들어서

2022년 11월 22일
·
0개의 댓글
·
post-thumbnail

JPA Entity 심층탐구 (1) Entity에 Kotlin Data class를 써도 될까?

시작하며 프로젝트를 돌아보기 시작하며 Entity부터 시작했다. 그래서 Entity에 대하여 기본 학습을 마치고 나서 처음부터 하나하나 뜯어보기 시작했다. 그러다가 Entity에 내가 아무 생각없이 data class를 쓰고있는 것을 발견하고, 그 이유를 찾기 위해 이 글을 쓰기 시작했다. 공부 Kotlin Data class Data class란 무엇인가? kotlin에서 제공하는 class 이다. 가장 큰 특징이자 편의성이라하자면 기본적으로 제공하는 여러 method 들에 있다. equals() / hashcode() toString() copy() 이렇게 기본적으로 제공하는 객체지향 method들 덕분에 내가 안드로이드 개발을 하던 시절에는 매우 애용했었다. 헌데 여러 자료들을 보다보니 JPA에서는 이 data class를 쓰는 것을 추천하지 않는다고 한다. Hibernate(JPA 구현체)에서 요구하는 Entity 본 내용은 [Hibe

2022년 11월 21일
·
1개의 댓글
·
post-thumbnail

Freezed

Dart 문법에서 지원하지 않는 기능 toString(), equals, hashCode() 자동 생성 => Equatable 패키지로 해결 객체의 깊은 복사를 하는 clone 기능 직렬화 / 역직렬화 (toJson, fromJson) 패턴 매칭 기본적으로 모든 객체는 수정이 가능하다. Sealed Class Sealed Class Java15, Kotlin, C# 등에 문법으로 제공되는 기능으로 Enum보다 다양하게 사용하면서 타입을 제한할 수 있다. Freezed Dart에서 지원되지 않는 많은 것들을 지원하는 코드 제네레이터 라이브러리 freezed 특징 불변(immutable) 객체 패턴 매칭 지원 (when) fromJson(), toJson() 자동 생성 Sealed Class 생성 지원 freezed로 생성한 Result 클래스 - Sealed Class ![](

2022년 10월 5일
·
0개의 댓글
·
post-thumbnail

Data Class

데이터를 다루는데 최적화된 Class 5가지 기능을 내부적으로 자동으로 생성 > 1. equals() - 내용의 동일성 판단 > 2. hashcode() - 객체의 내용에서 고유한 코드 생성 > 3. toString() - 포함된 속성을 보기 쉽게 나타냄 > 4. copy() - 객체를 복사하여 똑같이 내용의 새 객체를 만듦 > ※ 파라미터 없이 생성할 수도 있고, 파라미터를 전달하여 일부 속성 교체 가능 > 5. componentX() - 속성을 순서대로 반환 > ※ 배열이나 리스트 등에 Data Class 객체가 담겨 있을 때 이 내용을 자동으로 꺼내 쓸 수 있는 기능을 지원하기 위한 함수 풀코드

2022년 7월 16일
·
0개의 댓글
·

[Kotlin] Data class

Data class data 키워드를 사용하여 객체를 생성한다. 이때 생성자의 매개변수는 최소 한 개가 있어야한다. data class는 abstract, open, inner, sealed class일 수 없다 class 앞에 data 키워드를 붙인다. copy()를 이용해서 객체를 복사한다. component1(): 숫자 순서에 맞는 매개 변수 인덱스의 값을 가져온다. (변수,변수,변수) = data class 객체 : 클래스의 변수들을 한 번에 담을 수 있다.

2022년 7월 9일
·
0개의 댓글
·
post-thumbnail

[Java] 레코드(Record)

레코드(Record) > 변경할 수 없는 데이터의 투명한 전달자 역할을 하는 클래스 Kotlin의 data class와 비슷한 것이라고 보면 될 것 같다. JDK 14에서 preview로 도입되었으며, JDK 16에서 정식으로 도입되었다. JEP 395 Records 코드로 비교해보자 Before 그동안은 단순 불변 데이터 저장용으로 클래스를 만들고, equals, hashCode, toString 메서드를 오버라이드 해주었다. After record를 이용해서 이렇게 간결하게 작성할 수 있다.

2021년 11월 21일
·
0개의 댓글
·
post-thumbnail

스코프 함수(scope function), Data Class, Lamda expression, lateinit vs lazy init, 인텐트(intent), Collection

시작 > 혼자 공부하면서 정리하고 싶은 부분을 작성한 글입니다 👀 함께 공부하는 사람에게는 도움이 되었으면 좋겠고, 혹시 제가 잘못 이해한 부분이 있다면 알려주시면 감사하겠습니다 💌 🔹 스코프 함수 (scope function) 특정 객체의 컨텍스트 내에서 특정 동작(프로퍼티 초기화, 활용 등)을 실행하기 위한 목적만을 가진 함수 람다 함수로 사용하게 되면 임시로 scope(범위)를 형성하는데, 이 범위에서는 해당 객체의 이름 없이 접근할 수 있다. ◼ apply 객체의 확장 함수. 내부에서는 this를 통해 객체에 접근할 수 있다. (this는 생략 가능) 반환 결과가 객체 자신이기 때문에 주로 객체의 초기화에 쓰인다. ◼ also 객체가 파라미터를 통해 전달 - 람다의 입력값 람다의 입력값은 it으로 접근할 수 있고, 반환 결과는 객체이다. 객체 유효성을 확인하거나 print 함수를 통해 디버깅하는 용

2021년 11월 12일
·
0개의 댓글
·
post-thumbnail

[Kotlin] data class 파헤치기 - copy, toString, equals, hashcode, componentN

Tech-I-Learned Github 바로가기 > 코틀린에서 자주 사용하는 data class 잘 알고, 잘 쓰자! 🤷‍♀️data class란? [참고] kotlinlang.org : Data classes data class는 데이터 보관을 주 목적으로 하는 클래스이다. 아래와 같아 data라는 키워드를 사용해 선언할 수 있다. data class는 특이하게도 컴파일러가 몇 가지 함수를 제공해준다. 다만 여기서 중요한 점은, > 기본적으로 이 함수들은 주 생성자에 선언된 프로퍼티에 한정되어있다. 이 사실을 명심

2021년 10월 3일
·
1개의 댓글
·
post-thumbnail

[Kotlin] 감동 실화 Data Class 알아보기

자바와 다르게, 코틀린은 다양한 Class 를 제공해준다. 그 중 하나로 Data Class 라는 것이 있는데, 이는 자바 개발자들의 고충과 니즈를 정확히 파악한 기능을 갖고 있다. 정말 감동적이지 아니할 수 없다! 이번 포스팅에선, Data Class (데이터 클래스) 가 우리에게 선사하는 감동을 느껴보자! Data Class (데이터 클래스) 개념 일반 클래스와 달리, 다양한 메소드를 자동으로 생성해주는 클래스이다. 만약 자동으로 생성되는 메소드들이 별로 필요하지 않는 녀석들이었다면, 개발자들 사이에서 쓰이지도 않았을 터이다. 하지만 매우 폭발적인 편리함을 제공하는 유용한 메소드들이 자동 생성된다. Data Class 생성 시 같이 만들어지는 녀석들 hashCode() copy() equals() toString() componentsN() 또한 아래와 같은 여러 가지 다양한 특

2021년 9월 13일
·
0개의 댓글
·
post-thumbnail

[Kotlin] 깊은 복사(Deep Copy) 하는 3가지 방법

Tech-I-Learned Github 바로가기 > 너 것도 내꺼, 내 것도 내꺼 🤔복사가 뭐가 중요한데? 가끔 그럴때가 있다. 분명 A 변수/인스턴스의 값을 변경했는데 B까지 바뀐 그런 슬픈 일.. 띠용해서 주솟값을 찍어보면 더 띠용한다. 내가 직접 변경한 A와 변경된 B가 같은 주솟값을 가지고 있다. 그것은 바로 얕은 복사와 깊은 복사를 구분하지 않았기 때..문.. 내 변수는 소중하니까.. 복사하는 방법에 대해 알아보자.. 😮얕은 복사(Shallow Copy) vs 깊은 복사(Deep Copy) 얕은 복사는 말 그대로 얕게 복사하고 깊은 복사는 깊게 복사한다. 뭘 깊게 복사한다는건데!!! 라고 묻는

2021년 9월 11일
·
1개의 댓글
·

entity json변환시 proxy 이슈

문제상황 Entity를 Json으로 변환하다보면 lazy loading된 객체를 제대로 serialize하지 못하는 이슈가 있다. 예제 코드를 통해 문제를 확인해보자. Test 위 테스트를 실행해보면 아래와 같은 결과가 나온다. 내용을 읽어보면 세션이 없어서 프록시로부터 lazy loading하는 객체를 못가져오는것으로 보인다. 실행결과 문제원인 article을 조회하고나서 이미 세션이 닫히고, 그 이후 proxy를 통해 접근하려니까 문제가 발생한 경우이다. 사실 테스트코드 같은 경우는 @Transactional을 설정해서 동작하도록 할 수 있다. @Transactional이 설정되면 해당 트랜잭션이 종료될때까지 세션은 살아있고, 그 안에서 json으로 변환하는 경우 정상적으로 lazy loading이 가능해지기 때문이다. 하지만, Controller의 응답으로 내려보내야 하는 경우에는 세션을 계속 열어두기 부담스러울 수 있다

2021년 4월 17일
·
0개의 댓글
·

data class의 getter override

Kotlin의 data class에서 getter를 override하고 싶은 일이 있었다. 엔티티를 만드는데, 내부 어트리뷰트가 컬렉션이었고 이걸 외부에서 조회할때 immutableList로 가져가도록 하고싶었다. 하지만 primary constructor에 선언한 프로퍼티의 getter를 override하는것은 불가능했고, 약간의 꼼수를 써서 아래와 같은 모양으로 사용해볼까 했었다. 하지만 뭔가 찝찝한 마음이 들어서 찾아보다가 stackoverflow에서 아래 글을 보고 이렇게 사용하는걸 포기했다. https://stackoverflow.com/questions/38492103/override-getter-for-kotlin-data-class 요점은 data class 는 데이터를 변경하기 위한게 아니라 단순히 데이터를 저장하기 위한 것이다. 위와 같은 상황이면 차라리 그냥 class를 사용하고 equals와 hashcode를 구현하라. 임의의 getter

2021년 4월 13일
·
0개의 댓글
·
post-thumbnail

[Kotlin/코틀린] 다양한 코틀린 클래스

💌 다양한 코틀린 클래스 📌 데이터 클래스 💜 데이터 클래스 data 주생성자 선언해야 함, 생성자의 매개변수는 최소 하나 이상 모든 주 생성자의 매개변수는 var/val로 선언 데이터 클래스는 abstract, open, sealed, inner 등 예약어 추가할 수 없음 > - equals() / haseCode() : 같은 데이터 클래스 객체끼리 비교 toString() : 데이터를 문자열로 반환 componentN() : 프로퍼티 값을 가져옴, 데이터 분해 선언 copy() : 개체를 복사해 다른 객체를 만듦 📌 Enum 클래스 💜 열거형 클래스 선언 및 이용 enum : 열거형 타입 제공 프로퍼티 - name:문자열, original:인덱스번호 함수 - value() , valueOf() 🖥 NORTH... 0 NORTH SOUTH WEST EAST WES

2021년 3월 29일
·
0개의 댓글
·