목록언어 (18)
Simple&Natural
자바에서는 If(b == null) { ... } else { ... } 등으로 처리해야 하는 코드가 코틀린에서는 ?: 하나로 해결이 가능하다. 아래의 예제는 value의 결과값이 null일 경우 3을 대입해준다. 예시1) val testMap = mutableMapOf('a' to 1) val value = testMap.putIfAbsent('b', 2) ?: 3 // putIfAbsent는 'b'가 존재하지 않는 경우 null을 반환 println(value) // 출력값 3 예시2) getNewsFromUrl(newsUrl)?.let { mNewsList.add(it) } // News가 null이 아닌 경우 list에 추가해준다.
반환값의 차이 외에는 비슷한 기능을 수행하는 것 같지만 매우 중요한 차이점이 하나 있다. 바로 키가 없는 경우 computeIfAbsent은 계산 된 값을 반환하고, putIfAbsent은 null을 반환한다는 것이다. (키가 이미 있다면 둘다 기존의 값을 그대로 출력한다) 소스코드로 살펴보자 전자의 경우 null을 출력하는 반면, 후자의 경우 2를 출력한다. 비슷한 기능으로 생각하고 전자를 쓰면 nullPointerException을 마주할 수도 있으니 주의하여 사용하여야 한다. 참고자료) https://www.it-swarm.dev/ko/java/java-8-%EB%A7%B5%EC%97%90%EC%84%9C-putifabsent%EC%99%80-computeifabsent%EC%9D%98-%EC%B0..
동일한 기능의 두 클래스를 자바와 코틀린으로 만들었을 때의 차이이다. 참고자료 https://alexdunn.org/2018/01/25/android-kotlin-basics-property-encapsulation/ Android Kotlin Basics – Property Encapsulation About This Series This “Android Kotlin Basics” blog series is all about fundamentals. We’ll take a look at the basics of building Android apps with Kotlin from the SUPER basics, t… alexdunn.org
자바에서 가끔 객체의 동일성을 판단해야 하는 경우가 있다. 이때 무조건 hashcode나 identityHashcode를 쓰면 될 것 같지만 사실 이 둘은 완벽한 고유성을 보장해주지 않는다. 정확히 말하면 해시코드 값이 다르면 서로 다른 객체이지만 객체가 서로 다르다고 하여 반드시 다른 해시코드 값을 갖지는 않는다. 소스코드로 확인해보자. 출력값) Exception!, treeSet's size = 99 Finished at count = 122354 중복을 허용하지 않는 Key 값의 집합인 TreeSet에 임의의 객체를 생성하여 해당 객체의 hashcode를 넣어주는 예제이다. 만약 중복이 발생한다면 생성된 object의 갯수(objSize)와 treeSet의 크기가 일치하지 않을 것이다. 위의 예제는..