6개월 가량 코틀린을 사용하면서 느낀점을 작성하고자 한다.
장점
- 코드가 간결해진다.
- 코드가 간결해지니 가독성도 증가한다.
- 복잡한 로직을 간단하게 짤 수 있다.
- 모두가 말하는 널 안정성
- 람다, 스트림 사용가능!
- 자바와 호환성 100%
- ETC...
우선 장점에대해서 나열하면 자바만 사용해온 나로썬 엄청 좋다 이다. 그냥 다 좋다! 왜 그런가 하면
첫번째로 코틀린에 익숙해질수록 코드가 단순해진다.
도대체 무엇이 단순해지는가? 말로만 하지말고 보여달라
우선 안드로이드 View를 사용하려면 항상 아래와 같은 (View)findViewById(R.id.text.. )
와 같이 선언을 해줘야하는데 뷰가 하나정도면 괜찮지만 여러개일 경우 여간 귀찮은게 아니다.
반면 코틀린 코드는 ?
이게 끝이냐고? 그렇다 이게 끝이다. Kotlin extionsions를 사용하면 위와 같이 사용할 수 있다.
다음 자바코드를 보자
아래와 같이 Person클래스가 있다고하고,
필드로는 name, age, nick, sex, hobby가 있다고 할때 아래와 같이 선언해줘야 한다.
요즘 IDE가 좋아져서 다행이 setter / getter를 생성하는건 불편함이 없지만
뭔가 내용에 충실하기보단 사용하기위해 어쩔수 없이 작성해줘야 하는 코드들이 너무많다.
반면 코틀린 코드는?
이번에도 이게 다다.
아래와 같이도 사용할 수 있다.
코틀린은 null safe 하기 때문에 저렇게 초기화를 빈값으로 초기화를 하던지,
lateinit을 사용하여 늦은 초기화를 해주거나, 또는 null값으로 초기화를 할 수 있다.
자 이제 Person코드를 가지고 놀아보자.
위코드는 단순히 각각 다른 이름과 나이를 입력하여 Person객체를 생성하고 List에 담아준 모습이다.
동일한 내용을 코틀린으로 변환했을때는 아래와 같다.
길이는 모르겠지만 전체적인 내용면에서 불필요한 보일러플레이트 코드가 없어져서 한눈에 잘 들어온다.
자 그렇다면 위의 List의 값을 아래와 같이 찍으려면 어떻게 해결 하겠는가?
잠시 생각해보자. ( 실습해봐도 좋다 )
우선 자바는 아래와 같이 작성할것 같다.
뭔가 굉장히 지저분한 느낌인데...
for문을 변경하여 다시한번 줄였다.
코드는 단순하지만 뭔가 한눈에 안들어온다 (나만그런가)
아래는 코틀린 코드이다. 리스트 값을 String으로 변형해주는 joinToString() 메서드를 제공한다.
separator =""
리스트를 스트링으로 만들때 구분 값으로 뭘 넣어줄꺼냐 인데 "\n"을 넣었으므로 리스트안에 하나의 아이템마다 줄바꿈이 이루어진다.
prefix = ""
리스트를 스트링으로 변환할때 데이터 출력전에 무엇을 넣겠냐인데, "[Person List]\n"을 넣었으니 가장 앞에 출력된다.
자 그럼 추가로 아래와 같이 나이가 20살 미만일때는 제외시키고 싶다면 어떻할 것인가?
우선 자바코드는 아래와 같이 if 조건을 줘서 해결할 것 같다.
코틀린은?
아래와 같이 필터를 걸어줘서 해결 가능하다.
filter { 조건 }을 하면 조건에 해당되는것은 필터로 걸러지고 값이 들어온다.
단점
- 초기 학습이 필요하다(?)
- 없음.
결론
정말 코틀린의 빙산이 일각에 일각도안될 먼지만큼 설명한 글이지만 이외에도 기본적으로 제공되는 유틸성 함수들도 많고,
확실히 코드를 작성하는데 간단한 로직부터 복잡한 로직까지 정말 단순하게 작성할 수 있어서
생산성이 증가한 것을 느낀다. 조금더 기능구현에 집중할 수 있고, 단순한 보일러 플레이트 들이 줄어들어서
단순반복적으로 불필요한 코드를 작성하는 일이 없어졌으며, 심지어 단점으로는 초기학습이 필요하다고 적어놨지만
정말 쉬운 편인것 같다. (일주일만 바짝하면 어느정도 알 수 있다고 생각한다.)
이상으로 코틀린을 사용하면서 느낀점에 대해서 포스팅을 마무리한다.
다음 시간에는 책에 대한 내용을 공부하면서 기초적인 부분부터 정리해볼 생각이다.
다음 포스팅은
3/2일 전까지 작성완료하기
'개발 공부 기록하기 > - Kotlin & Java' 카테고리의 다른 글
for, foreach, foreachIndexed 루프탈출 하기 (1) | 2018.05.27 |
---|---|
Kotlin in Action Study - 01 (0) | 2018.02.24 |
Kotlin을 시작하며 (0) | 2018.02.13 |
지뢰찾기 알고리즘 구현 (0) | 2017.06.16 |
스레드 동기화 synchronized에 관해서 (1) | 2016.07.05 |