본문 바로가기
Kotlin/Kotlin 문법

코틀린 POJO 데이터 클래스

by MonoSoft 2020. 12. 31.
728x90
반응형

package com.monosoft.monopractice

//POJO : 어떤모델이되는 클래스, 비어있는 어떤 틀 클래스를 푸조라고 한다.

data class Ticket(val companyName : String, val name : String, var date : String,var seatNumber : Int)
//toString(), hashCode(), equals(), copy()

class TicketNormal(val companyName : String, val name : String, var date : String,var seatNumber : Int)

fun main(){
val ticketA = Ticket("koreanAir","kimwonho","2020-02-16",14)
val ticketB = TicketNormal("koreanAir","kimwonho","2020-02-16",14)

println(ticketA) //보기쉽게 출력됨
println(ticketB) //메모리 주소값만 출력됨
}

 

 

 

DTO ( POJO/ POCO) 생성 및 사용 방법
자바 문법

class DtoStudent {
     private String name;
         
     public void setName(String name){ this.name = name; }
     public String getName(){ return this.name;}
}

코틀린 문법

data class DtoStudent(var name: String)

 

자바에서는 getter/setter을 만들어 줘야합니다.

코틀린에서는 데이터 클래스(data class)를 이용 데이터 전송 개체인 DTO를 만듭니다.

 

데이터 클래스(data class) 사용 시 아래 기능을 따로 구현하지 않아도 사용가능합니다.

 

getters (and setters in case of vars) for all properties
equals(), hashCode(), toString(), copy(), component1(), component2(), …,

 

데이터 클래스(data calss) 사용시 주의할점은 생성자에는 하나 이상의 매개 변수가 필요하며, 생성자 매개 변수는 val or var로 표시해야 합니다.

 

kotlinlang.org/docs/reference/data-classes.html

 

Data Classes - Kotlin Programming Language

 

kotlinlang.org

 

 

fun main(args: Array<String>) {
	// 자바에서 인스턴스 시 new DtoStudent() 문법을 사용합니다.
	// 코틀린에서는 인스턴스 시 new가 필요없습니다.
	val dto = DtoStudent(1, "철수")
	// getter
	println("${dto.grade} ${dto.name}")

	// setter
	dto.grade = 2
	dto.name = "영희"
	println("${dto.grade} ${dto.name}")

	// copy()를 이용사하여 객체 복사
	val dto2 = dto.copy()
	println("복사, ${dto2.grade} ${dto2.name}")

	// 객체 복사 시 특정 데이터를 변경하여 복사
	val dto3 = dto.copy(3)
	println("복사 시 학년 변경, ${dto3.grade} ${dto3.name}")
	val dto4 = dto.copy(name = "동이")
	println("복사 시 이름 변경, ${dto4.grade} ${dto4.name}")

	// 또 다른 방법
	val dto5 = DtoStudent2(6)
	dto5.name = "용용이"
	println("${dto5.grade} ${dto5.name}")
}

data class DtoStudent(var grade: Int, var name: String)

data class DtoStudent2(var grade: Int) {
	var name: String = ""
}

실행 결과

1 철수
2 영희
복사, 2 영희
복사 시 학년 변경, 3 영희
복사 시 이름 변경, 2 동이
6 용용이

728x90
반응형

댓글