현재 회사에서는 Java를 사용한다. 나중에 Kotlin을 사용할 때를 대비하기 위하여 코틀린은 자바에 비하여 무엇이 좋고 기업에서 왜 사용하는지 궁금하여 알아보았다.
코틀린의 장점
1. 간결함
코틀린은 자바보다 구문이 간단하다. 이로 인하여 코드를 더 쉽게 짤 수 있고 유지보수 차원에서도 유용하게 적용된다.
간단하게 예를 들자면 아래의 함수는 리스트의 짝수의 합을 구하는 코드이다.
Java
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6);
int sumWithForEach = calculateSumWithForEach(numbers);
System.out.println("Sum with for-each: " + sumWithForEach);
int sumWithStream = calculateSumWithStream(numbers);
System.out.println("Sum with stream: " + sumWithStream);
}
public static int calculateSumWithForEach(List<Integer> numbers) {
int sum = 0;
for (int number : numbers) {
if (number % 2 == 0) { // 짝수 확인
sum += number;
}
}
return sum;
}
public static int calculateSumWithStream(List<Integer> numbers) {
return numbers.stream()
.filter(number -> number % 2 == 0)
.reduce(0, Integer::sum);
}
}
Kotlin
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6)
val sum = numbers.filter { it % 2 == 0 }.sum()
println(sum)
}
Java의 경우 코드의 스타일, 처리방식에 따라 for-each와 stream으로 작성할 수 있다.
하지만 이보다 더 간결하게 함수를 만든다.
2. NullPointException의 안정성
코틀린은 기본적으로 null을 허용하지 않는다. 변수를 선언할 때 기본적으로 non-null로 지정되기 때문에 null과 관련된 예외 처리나 오류가 컴파일 단계에서 줄어들고, 코드 작성도 훨씬 간결해진다.
Java
public String getUpperCaseName(Person person) {
return Optional.ofNullable(person)
.map(Person::getName)
.map(String::toUpperCase)
.orElse("");
}
Kotlin
fun getUpperCaseName(person: Person?): String {
return person?.name?.uppercase() ?: ""
}
코틀린에서는 ?. 연산자를 사용해 null 여부를 간단하게 체크하고, ?: 연산자로 기본 값을 지정할 수 있다. 자바는 Optional을 사용해 널 안정성을 확보할 수 있지만, 코틀린의 null 처리 방식이 더 직관적인 장점이 있다.
* NullPointerException 발생 포인트 예시
Java
public String getUpperCaseName(Person person) {
return person.getName().toUpperCase();
}
자바에서는 Optional을 사용하지 않고 null 체크를 하지 않으면 person가 없을 때 NullPointerException이 발생
Kotiln
fun getUpperCaseName(person: Person?): String {
return person?.name?.uppercase() ?: "이름 없음"
}
person이나 name이 null일 경우 ?. 연산자가 null을 반환하며, ?: 연산자를 통해 "이름 없음"을 반환
코틀린의 단점
1. 컴파일 속도
코틀린은 자바보다 컴파일 속도가 조금 더 걸릴 수 있다. 코틀린에서 기본적으로 제공하는 안정성과 추가 기능들, 또한 Null 관련 검사를 자동으로 수행하며 이 과정에서 컴파일 속도가 늦춰질 수 있다.
컴파일 속도가 정말 차이날까? 궁금해서 새로운 프로젝트를 만나 기본 동일한 설정에서 테스트해 보았다.
--> https://integer-ji.tistory.com/427
2. 자바와의 호환성
코틀린의 큰 장점으로는 자바와 호환이 잘되는 점을 뽑는다. 하지만 아이러니 하게도 자바가 가지고 있는 모든 라이브러리나 프레임워크가 코틀린을 100% 지원을 장담하진 않는다. 이 부분에서 필요한 라이브러리가 적용이 안될 경우 제한사항이 발생할 수 있다.
느낀점
코틀린을 살펴본 결과, 생산성과 가독성 면에서 확실한 장점이 느껴진다. 코드가 더 간결해져 유지보수에 유리하고, 널 안정성 덕분에 런타임 오류를 줄일 수 있는 건 큰 장점이라 생각한다.
또한, 코틀린의 문법은 안드로이드, JavaScript와 같은 다른 플랫폼 언어들과 유사하다 느꼈는데 이 점은 개발 인력이 부족한 스타트업이나 다양한 플랫폼을 제공해야 하는 초기 구축 단계에서 큰 장점으로 발휘하지 않을까 생각한다.
하지만 이미 자바로 구축되어 몇십 년 이상 서비스되는 곳에서는 코틀린을 도입하기 어려울 것 같다는 생각이 들었다. 코틀린을 자바 프로젝트에 추가할 경우 생길 수 있는 호환성 문제와 의존성 관리의 복잡성도 고려해하며 새로운 이슈가 발생될 때 대응이 어렵다는 점도 크게 느껴진다.
결론적으로, 코틀린의 장점을 잘 이해하고 필요할 때를 대비하되, 현재 환경에서는 자바의 깊이를 더해가는 것도 좋은 선택이라고 생각이 된다.
최종정리
코틀린이라는 언어를 직접 사용해 보기 전의 전반적이 느낌을 적어 보았다. 하지만 여기서 끝내지 않고 더 공부를 해가 보면 충분히 장점과 단점이 더 많이 나올 것이다. 그때 다시 이 글을 보며 회고를 작성하면 좋을 것 같다.
'코딩공부' 카테고리의 다른 글
Spring Boot 3.x에서 Chunk 사용해서 데이터 read, write 사용률 알아보기 (2) | 2024.12.24 |
---|---|
Java와 Kotlin, 컴파일 속도 차이가 많이날까? (1) | 2024.10.29 |