단, Java와 다르게 객체를 비교할 때 비교 연산자를 사용하면 자동으로 compareTo를 호출해준다.
public class JavaMoney implements Comparable<JavaMoney> {
private final long amount;
public JavaMoney(long amount) {
this.amount = amount;
}
@Override
public int compareTo(@NotNull JavaMoney o) {
return Long.compare(this.amount, o.amount);
}
}
fun main() {
val money1 = JavaMoney(2_000L)
val money2 = JavaMoney(1_000L)
if(money1 > money2) {
println("Money1이 Money2보다 금액이 큽니다")
}
}
<자바 코드>
public class Lec04Main {
public static void main(String[] args) {
JavaMoney money1 = new JavaMoney(1_000L);
JavaMoney money2 = money1;
JavaMoney money3 = new JavaMoney(1_000L);
System.out.println(money1 == money2); // true
System.out.println(money1 == money3); // false
System.out.println(money1.equals(money3)); // false
}
}
<코틀린 코드>
fun main() {
val money1 = JavaMoney(1_000L)
val money2 = money1
val money3 = JavaMoney(1_000L)
println(money1 === money2) // true
println(money1 === money3) // false
println(money1 == money3) // true
}
=> Java와 완전히 동일합니다.
=> Java 처럼 Lazy 연산을 수행합니다.
fun main() {
if (fun1() || fun2()) {
println("본문") // ||(또는) 이므로 값은 true이므로 실행됨.
}
if (fun1() && fun2()) {
println("본문") // &&(그리고) 이므로 값은 false 이므로 실행되지 않음.
}
}
fun fun1(): Boolean {
println("fun 1")
return true
}
fun fun2(): Boolean {
println("fun 2")
return false
}
컬렉션이나 범위에 포함되어 있다, 포함되어 있지 않다
println(1 in numbers)
a 부터 b 까지의 범위 객체를 생성한다
반복문에서 자주 쓰임.
a에서 특정 Index i 로 값을 가져온다
val str = "ABC"
println(str[2]) //C
a[i] = b
a의 특정 index i에 b를 넣는다
Kotlin에서는 객체마다 연산자를 직접 정의할 수 있다.
val money1 = Money(1_000L)
val money2 = Money(2_000L)
println(money1 + money2) // Money(amount=3000)
<자바코드>
JavaMoney.java
public class JavaMoney implements Comparable<JavaMoney> {
private final long amount;
public JavaMoney(long amount) {
this.amount = amount;
}
public JavaMoney plus(JavaMoney other) {
return new JavaMoney(this.amount + other.amount);
}
...
@Override
pulic String toString() {
return "JavaMoney{" +
"amount=" + amount +
'}';
}
}
Lec04Main.java
public class Lec04Main {
public static void main(String[] args) {
JavaMoney money1 = new JavaMoney(1_000L);
JavaMoney money2 = new JavaMoney(2_000L);
System.out.println(money1.plus(money2));
}
}
<코틀린 코드>
Money.kt
data class Money(val amount: Long) {
operator fun plus(other: Money): Money {
return Money(this.amount + other.amount)
}
}
Lec04Main.kt
fun main() {
val money1 = Money(1_000L) // 코틀린 class의 Money
val money2 = Money(2_000L)
println(money1 + money2) // toString이 구현되어 있어서 바로 덧셈 후 println 가능함. 물론 자바처럼 println(money1.plus(money2)) 처럼 구현도 가능함.
}
=> 진짜 진짜 진~~짜 JavaScript와 동일함…………… 찐이다…!!!!