Effective Java 관점에서 Kotlin
자바 엔지니어가 반드시 읽어야 할 Effective Java 관점으로 Kotlin을 살펴보면 Kotlin이 매우 영리하다는 것을 발견할 수 있다.
여기서 Effective Java 3장의 프로젝트 8, 프로젝트 9의
equals
와 hashCode
의 Override를 골라보겠습니다.equals와 hashCode의 Override.
개요
제3장 프로젝트 8, 프로젝트 9를 복습해 보세요.
대충 다음과 같은 내용이 적혀 있다.
equals
override.equals
방법은 다음과 같은 일반 계약을 만족시켜야 한다x
x.equals(null)
※ 자세한 정보를 알고 싶으신 분은 찾아보세요덮어쓰는 경우
false
, equals
덮어쓰는 경우Java로 구현
Java로 설치를 시도하면 다음과 같이 설치를 시도합니다.
public class DataA {
@NotNull
private final String a;
@NotNull
private final String b;
@Nullable
private final String c;
public DataA(@NotNull String a, @NotNull String b, @Nullable String c) {
this.a = a;
this.b = b;
this.c = c;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DataA dataA = (DataA) o;
if (!a.equals(dataA.a)) return false;
if (!b.equals(dataA.b)) return false;
return c != null ? c.equals(dataA.c) : dataA.c == null;
}
@Override
public int hashCode() {
int result = a.hashCode();
result = 31 * result + b.hashCode();
result = 31 * result + (c != null ? c.hashCode() : 0);
return result;
}
}
참고로 hashCode
및 equals
은 IntelliJ에서 자동으로 생성됩니다.그렇다면 이후 학급에 필드 등을 추가하는 등 변경한 상황에서 이것
hashCode
과 equals
이 당초 예상한 규격을 계속 충족시킬 수 있을까.이것은 실제 설치자에게 의뢰하여 반드시 의식하고 준수해야 하는 부분이 된다
Kotlin으로 설치
이게 Kotlin이라면 어떨까요?
data class DataB(
val a: String,
val b: String,
val c: String?
)
당신이 알고 있는 hashCode
를 사용하면 됩니다 이것을 진단해 봅시다.
public final class DataB {
@NotNull
private final String a;
@NotNull
private final String b;
@Nullable
private final String c;
...
public int hashCode() {
return ((this.a != null ? this.a.hashCode() : 0) * 31 + (this.b != null ? this.b.hashCode() : 0)) * 31 + (this.c != null ? this.c.hashCode() : 0);
}
public boolean equals(Object var1) {
if (this != var1) {
if (var1 instanceof DataB) {
DataB var2 = (DataB)var1;
if (Intrinsics.areEqual(this.a, var2.a) && Intrinsics.areEqual(this.b, var2.b) && Intrinsics.areEqual(this.c, var2.c)) {
return true;
}
}
return false;
} else {
return true;
}
}
}
잘 data class
하고 equals
다 했어요.그리고 자바의 자동 생성 코드와 같다...그렇게 지도 모른다, 아마, 아마...(확인 안 됨
(´-`)oO(hashCode, NonNull의 field도 null을 검사하는구나)
이로써 Kotlin의
hashCode
자동 설치data class
와 equals
때문에 학급을 변경해도 당초의 규격을 계속 준수하기 쉽다.겸사겸사 말씀드리다 hashCode
및 equals
Override 사용 가능Lombok
(Lombok의 기능과 Kotlin을 비교해도 재미있죠?)
끝날 때
이번에는 hashCode
과equals
밖에 없지만 Kotlin은 EffectiveJava를 실천하는 데 매우 편리한 기능이 많다.
영리하게 하는 것을 이해할 수 있기 때문에 Effective Java에 비해 Kotlin의 언어 기능을 보는 것도 재미있다.
참고로 Effective Java는 오래전에 출판되었고 내용도 오래된 부분이 있습니다. 하지만 곧 3판이 발매됩니다. 관심 있으신 분들은 꼭!
https://www.amazon.co.jp/Effective-Java-3rd-Joshua-Bloch/dp/0134685997
참고 자료
Reference
이 문제에 관하여(Effective Java 관점에서 Kotlin), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/atsuya046/items/e61aa1d5cc898046fd77
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번에는
hashCode
과equals
밖에 없지만 Kotlin은 EffectiveJava를 실천하는 데 매우 편리한 기능이 많다.영리하게 하는 것을 이해할 수 있기 때문에 Effective Java에 비해 Kotlin의 언어 기능을 보는 것도 재미있다.
참고로 Effective Java는 오래전에 출판되었고 내용도 오래된 부분이 있습니다. 하지만 곧 3판이 발매됩니다. 관심 있으신 분들은 꼭!
https://www.amazon.co.jp/Effective-Java-3rd-Joshua-Bloch/dp/0134685997
참고 자료
Reference
이 문제에 관하여(Effective Java 관점에서 Kotlin), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/atsuya046/items/e61aa1d5cc898046fd77
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Effective Java 관점에서 Kotlin), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/atsuya046/items/e61aa1d5cc898046fd77텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)