우리가 흔히 쓰는 == 연산자, 즉 equals 는 같다는 의미를 가진다.
그렇다면 객체가 같다는 건 '주소값이 같다'를 의미하는 걸까? 아니면 '수학적 값이 똑같다'를 의미하는 걸까?
이전 포스팅 에서 객체를 생성하면 객체의 주소값이 생성되고, 그 주소값을 가지고 객체를 구분하고 지칭할 수 있는 거라고 했다. 그래서 객체가 똑같다는 건, 무조건 주소 값이 같은 거라고 생각했었다.
그래서 당연히 전자의 의미만 있다고 생각했는데... 주소값으로 비교하지 않는 경우가 있었다. 바로 dataClass가 그랬다.
매개체의 데이터를 관리하는 용도로 사용하는 클래스.
즉, data를 담을 변수만 가지고 있는 클래스를 DataClass라고 부른다.
개발자의 개발편리성을 위해 몇가지 메서드가 자동으로 구현된다.
fun main(){
// 일반 클래스의 객체 생성
var obj1 = TestClass1(10, 20)
var obj2 = TestClass1(10, 20)
if(obj1 == obj2){
println("obj1과 obj2는 같은 객체입니다.")
} else {
println("obj1과 obj2는 다른 객체입니다.")
}
}
// 일반 클래스
class TestClass1(var a1:Int, var a2:Int)
fun main(){
// 데이터 클래스의 객체 생성
var obj3 = TestClass2(30, 40)
var obj4 = TestClass2(30, 40)
if(obj3 == obj4){
println("obj3과 obj4는 같은 객체입니다.")
} else {
println("obj3과 obj4는 다른 객체입니다.")
}
}
// 데이터 클래스
// 반드시 주생성자가 있어야 한다.
data class TestClass2(var a1:Int, var a2:Int)
데이터클래스에서는 데이터 클래스는 equals 메서드가 구현되어 있으며, 객체가 가지고 있는 프로퍼티의값이 같은 지를 비교해준다. 반면 일반 클래스에서는 각각의 ‘주소값’이 일치하는지를 비교해준다.
깔끔한 정리 감사합니다~