본문 바로가기

Happyer16

(314)
Kotlin In Effective - 8장. 컬렉션 효율적으로 사용하기 프로그래밍에서 컬렉션은 가장 중요한 개념 중 하나일 것이다. 코틀린도 컬렉션 처리 과정을 위한 여러가지 도구를 제공해준다. val visibleNews = mutableListOf() for(n in news){ if(n.visible) { visibleNews.add(n) } } Collections.sort(visibleNews,{ n1, n2 -> n2.publishedAt - n1.publishedAt }) val newsItemAdapters = mutableListOf() for(ninvisibleNews){ newsItemAdapters.add(NewsItemAdapter(n)) } 위의 코드를 코틀린에서는 아래와 같이 짤 수 있다. val newItemsAdapters = news .fil..
Kotlin Effectvie 번역 - 2. Readability 개인적으로 코틀린을 사용하면서 이게 가독성이 좋은 코드일까? 동료가 보기 좋은 코드일까?에 대한 고민을 많이 하였다. 그러던 중에 Kotlin Effectvie에서 가독성이라는 챕터를 발견하였고 아직 한국에 나오지 않은 책을 번역해보려 한다 Item 11. Design for readability 앞부분에는 모두가 아는 코드를 짜는 시간보다 읽는 시간이 절대적으로 많다는 설명과 함께 클린코드의 중요성을 상기시켜주고 있다. A와 B 코드는 어떤게 더 깔끔한 코드일까? //Implementation A if( person != null && person.isAdult ) { view.showPerson(person) } else { view.showError() } //Implementation B pers..
Kotlin in Action - 1장. 코틀린이란? 왜 필요한가? 요즘 코틀린으로 전환하거나 이미 사용하고 있는 기업이 많다. 코틀린의 어떤점이 좋길래?? 코틀린의 주요 특성 대상 플랫폼 : 서버, 안드로이드 등 자바가 실행되는 모든 곳 코틀린 -> 자바스크립트로 컴파일이 됨 ( 브라우저, 노드에서 실행 가능 ) : kotlin-natvie-backend 개발 진행 중 정적 타입 지정 언어 ( statically typed ) 자바와 다르게 타입 명시 안해도 됨. 코틀린 컴파일러가 문맥으로부터 유추하기 때문 ( type inference) 장점 성능 : 런타임에 어떤 메소드를 호출알지 알아내느 과정 필요 없음 신뢰성 : 컴파일러가 검증해줌 유지 보수성 : 처음 볼 때 타입이 있으니 보기 좋음 도구 지원 : 리팩토링 등 IDE에서 기능 코트린에 정적 타입 중 nullab..
Kotlin in Action 11장 : DSL 만들기 개요 labmda with receiver 를 이용한 DSL invoke convention 코틀린의 이러한 특성을 이용하여 DSL을 어떻게 설계해나가는지 살펴보자 API에서 DSL로 API 가 깔끔하다? 적절한 이름을 통한 명확하게 이해할 수 있음? 코드의 간결성. 불필요한 구문, 번잡한 코드가 없어야 함 ( 11장에서 주로 볼 부분 ) extension function infix calls operator overloading convention lambda with receiver Kotest - 코틀린 테스트 코틀린 테스트는 기존 Junit의 then 절의 가독성을 DSL과 함께 매우 높여주었다. DSL에서 중위호출을 어떻게 활용하는지 살펴보자 https://github.com/kotest/kot..
Kotlin In Action 7장. 연산자 오버로딩과 기타 관례 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법 = 관례(convention) 코틀린이 지원하는 convention 사용법에 대해 알아보자! 산술 연산자 오버로딩 자바 : + 연산자를 이용할 수 있는 타입은 정해져 있다. 코틀린 : 어디서든 일반 산술 연산자를 선언할 수 있다. data class Point(var x: Int, var y: Int) { operator fun plus(other: Point): Point { return Point(x + other.x, y + other.y) } } >> p1+p2 // 와 같은 연산이 가능 a + b 는 컴파일 시점에는 자바처럼 a.plus(b)로 변한다. operator fun Point.plus(other:Point):Point { r..
Kotlin In Action - 5장. 람다로 프로그래밍 코틀린 표준 컬렉션 라이브러리 함수에서 람다를 넘기는 방식 알아보기 자바 라이브러리와 람다를 함께 사용하는 방식 알아보기 수신 객체 지정 람다 ( lambda with receiver ) 에 대해 알아보자! 람다식과 멤버 참조 람다는 일련의 동작을 다른 함수에 넘겨야 하는 경우 코드를 간결하게 구현할 수 있다 val sum = { x:Int, y:Int -> x+y } println(sum(1, 2)) { println(42) } () run { println(42) } 실행 시점에 코틀린 람다 호출에는 아무 부가 비용이 들지 않음. 이유는? 8.2장 TODO link 달기 people.maxBy({ p: Person -> p.age }) // 마지막 인자가 람다라면 람다를 괄호 밖으로 뺄 수 있음 pe..
Kotlin In Action - 3장.함수 정의와 호출 함수 정의, 호출 방법 확장 함수와 프로퍼티를 사용해 자바 라이브러리를 코틀린 스타일로 적용하는 방법 컬렉션 만들기 val set = hashSetOf(1,7,53) val list = arrayListOf(1,7,53) val map = hashMapOf(1 to "one", 2 to "two") println(set.javaClass) // class java.util.HashSet 기존 자바 컬렉션 사용 이렇게 사용하는 이유는 자바 코드와 상호작용하기가 더 쉽기 때문 아래와 같이 추가 기능 제공 println(strings.last()) // list println(numbers.max()) // set kotlin-collections의 소스이다. /** * Returns an empty read..
Kotlin In Action - 2장. 코틀린 기초 함수와 변수 fun main(args: Array) { println("Hello World$args") } 클래스 위에 선언 가능 변수 선언 , 타입 선언 System.out.println 표준 라이브러리 함수를 wrapping 한 kotlin 표준 라이브러리임 세미 콜론 없어도 됨 fun max(a:Int, b:Int) : Int { return if(a>b) a else b } 식(expression)이 본문인 함수 fun max(a:Int,b:Int)=if(a>b) a else b 인텔리제이에서는 이 둘의 변환을 지원해 준다 ( Convert to expression body, Convert to block body ) fun max(a:Int, b:Int) = if (a>b) a else b 함..
Redis란? Redis란 Remote Dictionary Server의 약자이다. Redis의 특징 - 다양한 Collection 지원 Redis는 In-memory 데이터베이스이다 디스크 접근인 RDBMS 속도 개발 편의성 이렇게만 봐서는 뭔가 와닿지가 않는다. 예를 들어, 실시간 랭킹 서버를 구현한다면? 1) RDBMS를 이용하여 구현한 경우 저장된 SCORE를 정렬하여 가져오는 과정 필요 개수 많아지면 느려짐 트랜잭션 문제도 신경 써야함 2) Redis를 이용하여 구현한 경우 Redis의 Sorted Set을 사용하기 때문에 정렬이 필요 없음 ( 다양한 Collection의 장점 ) 모든 자료구조는 Atomic 하기 때문에 데이터 정합성 보장이 쉬움 Redis Key Redis 키를 잘 설계 하는것도 중요하다...
레디스(Redis)의 다양한 활용 사례 들어가기 전에 나는 아직 실력이 부족한 개발자여서 레디스=캐시 로의 의미로만 이해하고 있었다. 대부분의 서비스에서 단순 캐시용도로만 사용하기도 한다. 레디스에 대해 정확히 이해를 하지 않으면 성능이 제대로 나오지 않을 수도 있고, 제대로 활용하지도 못할 수도 있다. 레디스를 어떻게 배치할까? 캐싱 전략? 단순 캐시용도말고 다른 용도로는 어떻게 쓸까? 그래서 나의 부족한 지식을 채우기 위해 해당 포스팅을 작성하게 되었다. 캐싱 전략 - Look Aside ( = Lazy Loading ) 캐시를 옆에 두고 필요할 때만 데이터를 캐시에 로드하는 전략이다. ( key-value 형태로 저장됨 ) 데이터 가져오는 요청 Redis에 먼저 요청 -> 있으면 반환 없으면 데이터베이스에 데이터 요청 이 데이터를 레디스..