Effective Java 관점에서 Kotlin
자바 엔지니어가 반드시 읽어야 할 Effective Java 관점으로 Kotlin을 살펴보면 Kotlin이 매우 영리하다는 것을 발견할 수 있다.
여기서 Effective Java 3장의 프로젝트 8, 프로젝트 9의
equals와 hashCode의 Override를 골라보겠습니다.equals와 hashCode의 Override.
개요
제3장 프로젝트 8, 프로젝트 9를 복습해 보세요.
대충 다음과 같은 내용이 적혀 있다.
equalsoverride.equals 방법은 다음과 같은 일반 계약을 만족시켜야 한다xx.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.)