안드로이드 개발자의 창고
[15일차 Kotlin] Any 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
📖 Any란?
- Kotlin에서 사용하는 모든 클래스의 부모 클래스이다.
- Kotlin은 클래스를 작성할 때 상속받지 않는다면 자동으로 Any 클래스를 상속받는다.
- Any 클래스에는 모든 객체가 가지고 있어야할 메서드가 제공되고 있으며 이 메서드들을 Overriding 하여 각 클래스의 성격에 맞게 재 구현하여 사용할 수 있다.
- 모든 클래스는 Any를 상속 받은 상태이기 때문에 모든 객체들은 Any 타입 변수에 담을 수 있다.
toString
- 객체의 정보 문자열을 반환하기 위해 만드는 메서드
- println 과 같은 출력문으로 출력하면 toString 메서드를 호출하고 이 메서드가 반환하는 문자열을 이용해 출력하게 된다.
equals
- == 연산자를 사용하면 자동으로 호출되는 메서드
- == 연산자 기준으로 좌측에 있는 변수를 통해 메서드를 호출하고 우측에 있는 객체가 매개변수로 들어온다.
- 이 메서드가 반환하는 결과가 == 연산의 결과가 된다.
hashCode
- object의 hash code value를 return 한다.
📖 예제 코드
fun main() {
// Any 타입 변수에 담아준다.
val a1:Any = TestClass1()
val a2:Any = TestClass2()
println(a1)
println(a2)
val t3 = TestClass3(100, 200)
val str1 = t3.toString()
println("str1 : $str1")
println(t3)
val t4 = TestClass3(1000, 2000)
val t5 = TestClass3(100, 200)
if(t3 == t4){
println("t3과 t4는 같습니다")
} else {
println("t3과 t4는 다릅니다")
}
if(t3 == t5){
println("t3과 t5는 같습니다")
} else {
println("t3과 t5는 다릅니다")
}
}
class TestClass1
class TestClass2
class TestClass3(var a1:Int, var a2:Int) {
// override fun toString(): String {
// return super.toString()
// }
// 객체의 변수 값이나 필요한 정보를 구해 출력하는 용도로 사용
override fun toString(): String {
println("a1 : $a1")
println("a2 : $a2")
return super.toString()
}
override fun equals(other: Any?): Boolean {
if (other != null) {
// 형 변환
val temp = other as TestClass3
if (this.a1 == temp.a1 && this.a2 == temp.a2) {
return true
} else {
return false
}
}
return false
}
}
✔️코드 해석
- TestClass3은 Any 클래스가 제공하는 메서드인 toString()과 equals()를 오버라이딩하여 구현했다.
- toString()
- 객체의 정보를 문자열로 반환하는 메서드
- overriding하지 않으면 객체의 ID 값을 반환한다.
- 예제 코드에서는 객체가 가지고 있는 멤버 변수와 ID 값이 출력된다.
- equals()
- 예제 코드에서는 other(t3)에 들어있는 값이 null이 아닐 때만 동작한다.
- other를 TestClass3으로 형변환한다.
- 객체의 맴버변수가 같으면 true를 반환하고, 다르면 false를 반환한다.
✔️ Console 출력 결과
'Computer > Kotlin' 카테고리의 다른 글
[15일차 Kotlin] 인터페이스(Interface) (0) | 2023.05.17 |
---|---|
[15일차 Kotlin] 추상화(abstract) (0) | 2023.05.17 |
[14일차 Kotlin] Overriding(오버라이딩) (0) | 2023.05.17 |
[14일차 Kotlin] 지연 초기화 - lateinit과 lazy (0) | 2023.05.17 |
[14일차 Kotlin] 캡슐화와 Property(프로퍼티) (0) | 2023.05.17 |