본문 바로가기
[Effective Unit Testing] Chap4. 가독성 [Effective Unit Testing] Chap4. 가독성 -테스트를 읽은 프로그래머는 코드가 “해야 할 일”을 이해할 수 있어야 한다.또한, 테스트를 실행한 후에는 코드가 실제로 "한 일”이 무엇인지 말할 수 있어야 한다. -테스트의 핵심인 단언문은 대상 코드의 올바른 동작을 규정한다. -결국, 테스트 코드는 읽기 쉬워야 한다.테스트가 무슨 일을 하는지 파악하기 위해 머리를 쥐어뜯는 일은 없어야 한다. -테스트 냄새는 숱하게 많지만, 그중에서도 가장 흔한 냄새는 바로 "기본 타입 단언”이다. 4.1. 기본 타입 단언 -단언문은 가정이나 의도를 명시해야 한다.또한 코드의 동작을 서술하는 문장이어야 한다.기본 타입 단언(Primitive Assertion)이란 단언하려는 이유나 의도가 의미를 알 수 .. 2019. 3. 13.
[도서 정리] Android Development with Kotlin - Generics Are Your Friends Android Development with Kotlin - Generics Are Your Friends 이 정리글은 Kotlin in Action 책을 보고 실무에 Kotlin 을 사용하던 사람이 몰랐던 내용이나 remind 하고 싶은 내용을 위주로 정리한 글입니다. 제대로 내용을 파악하시려면 책을 구매해서 읽어보세욤~ - Kotlin 에서 generics 는 기본적으로는 invariant 이다. invariant 는 subtyping relation 이 없다는 것 - generic 에서 subtyping 관계가 유지되는 것을 co-variant 라고 하고, 반대로 유지되는 것을 contra-variant. 그리고 유지되지 않는 것을 invariant 라고 한다. - Java 의 upper bound.. 2018. 12. 15.
[Kotlin] Kotlin 의 숨겨진 비용 #3 [Kotlin] Kotlin 의 숨겨진 비용 #3 https://medium.com/@BladeCoder/exploring-kotlins-hidden-costs-part-3-3bf6e0dbf0a4 Delegated property -class Example{ var p: String by Delegate()} property 에 delegate 를 사용할 경우에 해당 delegate 는 operator function 인 getValue 와 setValue 를 구현해야 한다.해당 function 들은 object instance 와 property metadata 를 받는다. public final class Example{ @NonNull private final Delegate p$delegate =.. 2018. 1. 18.
[Kotlin] Kotlin 의 숨겨진 비용 #2 [Kotlin] Kotlin 의 숨겨진 비용 #2 https://medium.com/@BladeCoder/exploring-kotlins-hidden-costs-part-2-324a4a50b70 Local functions -local function 의 limit 은 inline 으로 정의될 수 없다는 것 ( 글 쓴 당시까지는, 현재버전에서 꼭 체크해보라 ).그리고 local function 을 가지고 있는 녀석도 inline 이 될 수 없다.fun someMth(a: Int): Int { fun sumSquare(b: Int) = (a+b) * (a+b) return sumSquare(1) + sumSqaure(2)} local function 은 Function object 로 바뀐다.public .. 2018. 1. 17.
[Kotlin] Kotlin 의 숨겨진 비용 #1 [Kotlin] Kotlin 의 숨겨진 비용 #1 https://medium.com/@BladeCoder/exploring-kotlins-hidden-costs-part-1-fbb9935d9b62 -“With great power comes great responsibility” 를 기억해야 한다.( 간단한 코드를 짜는 대신 대가가 있다는 얘기다 ) -Kotlin bytecode inspector 를 사용하면 Kotlin 코드가 어떻게 bytecode 로 변환되는지 볼 수 있다.Android studio plugin 으로 접할 수 있다.이를 보면 primitive type 의 boxing, code 에서 보이지 않는 기타 object 들의 instantiation, 그리고 각종 추가 method 들의 추.. 2018. 1. 16.
[Java] Jit Compiler 에 대한 이야기 [Java] Jit Compiler 에 대한 이야기 http://blog.takipi.com/java-on-steroids-5-super-useful-jit-optimization-techniques/ -bytecode 는 original Java 코드를 그대로(dynamic optimization 없이) 나타낸 것이라고 보면 된다.JVM 이 bytecode 를 Assembly로 변환할 때 2가지 mode 가 작동한다. 1.Interpreted mode : JVM 이 bytecode 를 읽고 실행시킨다.2. Compiled mode(byte code to assembly) 이 두가지 mode 를 잇는 것이 JIT compiler 이다. Interpreted mode 가 assembly level 로 최적.. 2018. 1. 14.
[Kotlin Tutorial] DSL construction - Chap 11. [Kotlin Tutorial] DSL construction - Chap 11. 참조 : Kotlin in action 11.1. From APIs to DSLs -DSL 을 작성하기 전에 생각해봐야 할 것이 있다. 우리의 (Kotlin?) 궁극적 목표는 가독성과 유지보수성을 최대로 늘리는 것.그것은 곧 좋은 API 를 설계하는 것으로 이어진다. 그렇다면 API 가 clean 하다는 것은 무슨 의미일까?1. 사용자가 읽기 좋은 것. 그것은 name 과 concept 을 잘 잡는 것이다.2. 의미없는 syntax 는 빼고, 최소한의 코드로 code 가 읽기 좋은 것. -Kotlin 에서는 clean API 를 위해서 extension function, infix calls, lambda syntax sh.. 2017. 9. 14.
[Kotlin Tutorial] 한 차원 높은 함수 : 람다를 parameter 와 return value 로 - Chap8. Higher-order functions: lambdas as parameters and return values [Kotlin Tutorial] 한 차원 높은 함수 : 람다를 parameter 와 return value 로 - Chap8. Higher-order functions: lambdas as parameters and return values 참조 : Kotlin in action 8.1. Declaring higher-order functions -Higher-order function 이란 argument 와 return 으로 다른 function 을 갖는 것을 의미한다.Kotlin 에서는 function 이 lambda 나 function reference 로 표시된다. 8.1.1. Function types -val sum = { x:Int, y:Int -> x+y }val action = { pr.. 2017. 8. 31.
[Kotlin Tutorial] Kotlin 소개 - Kotlin : what and why [Kotlin Tutorial] Kotlin 소개 - Kotlin : what and why 참조 : Kotlin in Action -Kotlin 은 Java platform 을 targeting 한 새로운 프로그래밍 언어.Java 코드와 함께 쓰일 수 있다.Android 개발 뿐만 아니라 Server-side 개발에도 쓰일 수 있다. -Java 의 iib, framework 와 함께 쓰일 수 있고, Java 와 비교해 Performance 도 거의 동일하다. 1.1. A Taste of Kotlin -http://try.kotl.in 을 통해 코드 실습을 할 수 있다. -data class Person(val name: String, val age: Int? = null) fun main(args: A.. 2017. 7. 12.
반응형