728x90

아토믹 코틀린 책이란

 코틀린의 철학을 이해하기 위한 서적이라 볼 수 있다. 그래서 코틀린스러운 방법에 대해서 각 방법을 다뤄 준다.

종합 평가

 파이썬을 할 때 파이써닉한 코드를, C언어는 씨스럽게 등 그런 말을 종종하곤 한다. 하지만 현실은 자바공화국인 한국에서는 자바만 아니 자바 8에 머물러있으니 지루하기 그지 없다. 이런 사막같은 곳에 오아시스란 코틀린이 아닐까 자바 대체 언어로 인식되며, 스프링 프레임워크를 이용할 수 있고 자바에서 불편했던 코드들을 코틀린으로 어느정도 대체하여 편리함을 추구할 수 있게 되었다.
 하지만 문제가 무엇일까? 현업에서 모두가 코틀린 문법을 제대로 숙지하여 코스럽게 코드를 작성할 수 있을까? 만약에 모두가 코스럽게 코드를 작성한다한들 다음 인계자가 코스럽게 코드를 작성할 수 있을까? 자바에서 코틀린으로 언어만 바뀐 코드를 작성하고는 있지 않을까? 이처럼 여러 문제들이 존재한다.
 그렇기 때문에 이 책을 읽으면서 모두가 너무 코틀린스럽지 않으면서 쉽게 배울 수 있는 개념정도로 예를 들어 data class와 같은 개념들을 주로 찾아보았다.
하지만 그런 쉽게 배울 수 있는 팁들과 함께 철학을 알아야 했다.
-> 친절하게도 책 앞부분에 언어 계보와 각 언어들에 대한 점을 착안하여 언어가 만들어 졌는지 알려주는 페이지가 존재한다.

철학

Non-NullAble

자바에서는 Null인 상태와 Null이 아닌 상태가 공존하기 때문에 NPE 발생 여부를 매번 확인해야 한다.
예를 들어 대게 DB에서 값을 읽어올 경우
if (list.size() > 0 ) 으로 예외 상황을 체크할 수 있지만, 모종의 이유로 list 객체가 생성되지 않았다면 Null Pointer Exception이 발생할 것이다. 실제로 그런 경험을 해본 적이 있다. 그래서 assert를 이용하여 if 시작 전에 null이 아닌 것을 확인하는 단언문을 설정한다.
그렇기 때문에 코드를 낭비한다. 그래서  코틀린이나 C# 과 같은 언어에서는 애초에 Non-Null 상태임을 기본으로 가져간다. 그리고 코틀린 문법으로 val a: String과 val b: String?은 전혀 다른 타입이란 점을 강조한 부분이 꽤나 좋았다.
이런 철학적인 부분을 이해하고 넘어가는 것이 중요하다고 생각했다.

Final은 Default요

자바로 코드를 작성하면서 final 키워드의 불편함을 느끼거나 왜 있는지에 대한 의문을 가져본 경험이 있을까?
나는 javascript나 C++에서 const를 이용하여 변경되지 않는 변수를 상수 처리하여 사용했다.
그런데 Java에서는 final 키워드를 붙이는 일이 꽤나 익숙치않았다.  다른 언어를 사용하면서 const는 느낌이 바로 오지만 final은 그렇지 않았기도 했고, 스프링 강의 영상을 보아도 쓰는 것을 거의 보지 못했기 때문이다. 남들이 안 하니 내가 이상한 느낌이다
하지만 코틀린에서는 기본적으로 val과 var를 제공하며 이에 따라 IDE에서 한번도 변경되지 않은 var 변수에는 val로 사용하라고 권유한다.
아래 내용과 이어지는 내용이지만 자바에서는 상속을 명시적으로 금지하기 위해서는 final 키워드를 키워드에 붙여야 한다. 하지만 코틀린은 그렇지 않다. 그런 이유는 무엇일까?
fragile base  class란 치약한 기반 클래스 문제가 있다. 기반 클래스가 변경에 의해 깨져버린 경우 하위 클래스가 모두 깨져버릴 수 있다. 그렇기 때문에 의도 파악이 중요하다. 그래서 final이 기본 설정으로 되어 있다.

Open 키워드

상속이 가능하다면 open이란 키워드를 의도적으로 붙이면서 상속이 가능하다는 것을 알려준다.
이런 식으로 다른 언어와의 다른 점을 찾아가며 기존에 쓰고 있는 언어에 대한 이해도와 다른 언어에 대한 이해도가 같이 올라갈 수 있다.

식이란 개념덕분에 코드에 상상력이 더 해지거나 코드가 간결해진다.

public int hello() {
if(true) {
    	return 1;
    } else {
    	return 2;
    }   
}
fun hello(): int {
	return if(true) {
    	1 
    }
    else {
    	2
    }
}

개념

1. data class의 동등성 보장과 copy를 통한 새로운 객체 반환하기
- Spring 이 용시 자동으로 생성되는 HashCode를 이용하면 안 된다. <- 검색을 통해 알게 된 내용
2. 스프레드 연산자 *를 이용한 list를 이용한 가변 인자 보내기
- DB에 여러 데이터를 저장할 때 꽤 유용해보였다. 왜냐하면 들어올 변수의 수를 정하지 않기 때문이다.
3. 람다를 val과 var에 담을 수 있다.
4.레이블
5.확장 프로퍼티

깨닫게 된 개념

다중 인터페이스 상속과 다중 상속

개체지향 개념을 학습하고, 직접 코드를 작성하다 보면은 인터페이스와 추상 클래스, 상속에 대한 혼동이 왔었다.
다 비슷하고 조금씩만 다르기 때문에 A란 것을 하기 위해 인터페이스를 써도 되고, 추상 클래스를 써도 되고 그렇게 느껴진다. 그래서 제일 먼저 하는 행동이 뭘까? 고민이 아니라 검색이다.
검색을 통해 인터페이스와 추상 클래스의 차이점?을 검색한다.
C++은 왜 다중 상속을 지원하고, Java나 Kotlin은 인터페이스 상속을 지원할까?
책에서도 설명했듯이 상태 변수를 관리하기 힘든 문제로 인터페이스 상속만 지원한다.
C++에 대한 다중 상속에 대해 설명이 없었지만 내가 정리한다면 C++은 워낙 제공하는 기능이 많아 써야하는 것과 쓰지 말아야하는 것을 구분할 줄 알아야 한다는 말이 있을 정도이다. 그렇기 때문에 다중 상속을 지원해주며 예외적인 상황에서 유용하게 사용할 수 있으나 그런 상황이 아니라면 지양해야하는 문법이다.

좋았단 점

1. 언어에 대한 설명만 있는 것이 아닌 철학과 개념에 대한 설명이 곁들어져 있다는 점
2. 코드 설명 시 테스트으로 코드를 설명해준다는 것
3. 각 챕터가 끝나면 메모 페이지가 존재한다는 점
4. 아는  기호나 기술에 대한 키워드에 대해 영어로 한번 더 알 수 있어서 좋았다.

아쉬웠던 점

1. 코틀린이라면 경량 스레드인 Coroutine이 필수가 아닐까?
2. DSL 과 관련된 내용이 없다는 점
3. 책 본문에서 연습 문제를 언급하지 않는다는 점
4. 아토믹 코틀린이란 책 제목때문에 테스트로 쓰이는 아토믹 라이브러리와 혼동이 왔었다.

책을 추천하는 이유

 코틀린에 대한 지식을 학습한다면 꽤 좋은 책이며, 책 표지도 이쁘니 소장할만한 가치가 있다. 코틀린 인 액션과 같은 책보다 훨씬 좋다고 생각한다. 코틀린 인 액션의 경우, 너무 글만 적혀있으니 언어를 배우는 것인지 생각이 든 경우가 많았다. 하지만 아토믹 코틀린을 이용하여 빠르게 코틀린을 습득한 후 어느정도 익숙해진 뒤  코틀린 인 액션을 통해 깊은 내용을 읽어보면 좋을 것 같다.
하지만 코루틴에 대한 내용이 없기 때문에 안드로이드 개발하는 분들께는 이 책 한 권으로 만족할 수 없을 것 같다. 물론 언어 자체만 배우는 저서임으로 안드로이드 관련 내용을 따로 봐야하긴 하지만...
 

반응형

+ Recent posts