코틀린과 자바는 한글 네이밍이 가능하다. (변수명, 클래스명 등) 하지만 우리는 주석을 제외하고는 코드에서 한글을 마주치는 경우가 거의 없다. 또 영문으로 코드를 작성하는 것에 익숙하기에, 의미가 잘 전달되더라도 한글 네이밍을 보면 눈살이 찌뿌려질 수 있다. 그렇다면 한글 변수는 나쁜가? 사람들이 한글 변수를 사용하지 않는 이유를 개인적으로 추측해보았다. 코드를 영어로 작성하는데 중간에 한글을 섞으려면 한/영 키를 눌러야한다. (즉 키보드를 한 번 더 눌러야한다.) 영어로 전부 작성되어있는 코드 사이에 한글이 박혀있으면 굉장히 생소하다. 카멜케이스 같은 네이밍 컨벤션을 적용하기 어렵다. 한번쯤 생각해 보았더라도 동료들을 설득할 수 있을지 모르겠다. ... 읽어보면 카멜케이스를 적용하기 어렵다 를 제외하면..
Kotlin
당신이 코틀린을 사용하고 있다면, '확장 함수'를 사용해봤거나 들어봤을 것이다. (아니어도 상관없다. 지금부터 알아보자) 코틀린은 확장 함수라는 기능을 제공한다. 우선 확장 함수가 어떻게 생긴 녀석인지 예시를 한 번 보자! 예시 String 클래스는 문자열의 처음, 끝을 가져올 수 있는 first(), last() 함수를 제공한다. 그런데 정말 만약에 문자열의 두 번째 글자가 필요한 일이 생겼다고 가정해보자. 이때 String에 대한 확장함수로 second() 함수를 만들어 볼 수 있을 것이다. (물론 [1]로 가져올 수 있겠지만, 좀 더 예쁘게 확장함수를 만들어보자!) fun String.second(): Char { if (this.isEmpty()) { throw NoSuchElementExcept..
코틀린을 처음 시작하면 프로퍼티라는 용어가 굉장히 헷갈릴 수 있다. 그래서 프로퍼티에 대한 용어 정리를 한 번 해보려고 한다. 프로퍼티 Kotlin In Action의 말을 빌리자면 코틀린 프로퍼티는 자바의 필드와 접근자 메서드(getter, setter)를 완전히 대신한다. 오해하지 말자. 이 말은 필드와 접근자 메서드를 모두 합친게 프로퍼티라는 말이 아니다. 프로퍼티는 필드의 역할도, 접근자 메서드의 역할도 할 수 있구나! 라고 받아들이면 된다. + 코틀린에선 자바의 필드를 뒷받침하는 필드(backing field) 라고 부른다. 코틀린을 처음 배울 때 가장 먼저 접하는 프로퍼티는 아래와 같은 형태일 것이다. val name: String = "빅스" 위 name 프로퍼티는 뒷받침하는 필드와 접근자 ..
코틀린에서의 인터페이스와 추상클래스의 차이에 대해 알아보자 구현적 관점에서의 차이 개념적 관점에서의 차이 구현적인 관점에서의 차이 프로퍼티 선언 다중, 단일 상속 구현적인 관점에서 (코틀린의) 인터페이스와 추상클래스의 큰 차이는 없다고 생각한다. 프로퍼티 선언 인터페이스와 추상클래스 모두 자체로는 생성이 불가능하며 구현부(함수 바디)가 있는 함수가 존재할 수 있다. 뿐만 아니라 프로퍼티 또한 둘다 선언할 수 있는데 여기서 조금의 차이가 발생한다. 코틀린 인 액션 (이하 코인액)에서는 이렇게 말한다. (말이 어렵다면 넘어가도 좋다) 인터페이스에는 추상 프로퍼티뿐 아니라 게터와 세터가 있는 프로퍼티를 선언할 수도 있다. 물론 그런 게터와 세터는 뒷받침하는 필드를 참조할 수 없다. (뒷받침하는 필드가 있다면 ..
코틀린의 인터페이스를 알아보도록 하자 코틀린의 인터페이스는 자바의 인터페이스와는 차이가 있다. 코틀린의 인터페이스에서는 프로퍼티 선언이 가능하지만 자바는 불가능하다. 자바에는 implements를 통해 인터페이스를 구현하지만 코틀린은 콜론(:)을 사용한다. 코틀린의 인터페이스 안에는 추상 메서드뿐 아니라 구현이 있는 메서드도 정의할 수 있다. (이는 자바 8의 디폴트 메서드와 비슷하다고 한다) 그럼 지금부터 코틀린 인터페이스의 예시들을 보며 알아가보도록 하자. 자바 코드는 이해를 돕기 위해 참고용으로 매 코드마다 넣어놨다. override 키워드와 인터페이스 우선 간단하게 인터페이스를 선언해보자 interface Soccer { fun kick() } 자바 코드 // java도 큰 차이는 없다 publi..
Java와 비교해서 Kotlin 맛보기 먼저 Kotlin을 잠시 맛보고 가도록 하자 클래스(Class)라는 개념의 목적은 데이터를 캡슐화하고 캡슐화한 데이터를 다루는 코드를 한 주체 아래 가두는 것이다. // java code 1-1 public class Person { private final String name; public Person(String name) { this.name = name; } public String getName() { return name; } } java code 1-1을 코틀린으로 변환해보자 // kotlin code 1-1 class Person(val name: String) 11줄을 차지하던 Person 클래스의 코드가 단 1줄로 변환되었다. 이와 같이 코틀린은..