코틀린을 왜 공부하기 시작했는데?
코틀린이 자바에 비해서 코드량이 엄청 줄어들어서 생산성이 엄청 높아진다는 말을 자주 들었습니다.
한번 해보고 싶었던 언어이기에, 사용해 보면서 자바와 비교했을 때, 어떤 점들이 편했는지 정리해보려고 합니다.
당연하지만, 사용해본지 1주일도 안 되었기 때문에, 틀린 내용도 많을 수 있습니다.
https://solved.ac/problems/sprout
solved ac 의 새싹 레벨 문제들을 전부 풀어보면서 학습을 진행했습니다.
편했던 점들
main 함수가 간단하다
java 라면?
public class Class {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
코틀린이라면?
fun main() {
println("Hello World")
}
이렇게 코드 줄수가 벌써 줄어든 것이 보여서 첫 줄만으로도 좋았습니다.
구조분해 문법이 있다.
js 에서 정말 편했던 부분이 구조분해 문법이었는데요, 이와 비슷하게 작동하는 것이 있어서 좋았습니다.
fun main() {
// in java?
// Scanner scanner = new Scanner(System.in);
// int a = scanner.nextInt();
// int b = scanner.nextInt();
// System.out.println(a / b);
val (a, b) = readLine()!!.split(" ").map { it -> it.toDouble() }
println(a / b)
}
java 라면 저렇게 4줄을 작성해야 하는데, 코틀린은 간단히 처리할 수 있다는 점이 좋았습니다.
Collection을 잘 활용한다.
String을 split으로 쪼개게 되면?
java에서는 String [] 이 나옵니다.
Kotlin에서는 List <String> 형태가 나옵니다.
이런 형태로, Collection 을 잘 활용하기에, 사용하기가 편합니다.
System.out 같은 부분이 없다.
java에서 System.out.println() 이 너무 길어서 sout이라는 것을 외워서 사용해 왔습니다.
kotlin에서는 println() 만으로 되기에, 훨씬 간단하게 느껴져서 좋았습니다.
Collection에 다양한 기능들이 되어있다.
Java에서는 List에 map을 통해서 다른 List로 변경하려면 아래와 같은 코드가 필요합니다.
List <Integer> integerList= stringList.stream(). map(). toList();
kotlin에서는 val integerList = stringList.map()
훨씬 간단해진 것을 볼 수 있습니다.
범위 연산이 편하다
1부터 10까지 출력하는 코드를 java로 작성한다면?
for(int i=1;i<=10;i++){
System.out.println(i);
}
Kotlin이라면?
for(i in 1..10){
println(i)
}
.. 을 통해서 범위를 직관적으로 표현할 수 있습니다.
until을 통해서 1부터 9까지만 표현할 수도 있습니다. 1 until 10
2차원 배열 선언이 편하다
val arrays = Array(2) { IntArray(3) }
val arrays2 = Array(2) { Array(3) { 0 } }
위와 같은 방식으로 편하게 작성할 수 있습니다.
java 라면 for문을 통해서 하나하나 초기화해야 한다는 점이 문제였지만, 이런 부분도 간단하게 해결할 수 있었습니다.
Null 관리를 안 해도 된다
Null 은 아얘 따로 관리가 되기에, 편하게 처리할 수 있습니다.
Optional 타입을 훨씬 편하게 사용한다고 느껴졌습니다.
String 타입은 String? 타입의 하위타입이기에, String을 String? 에 대입할 수 있는 부분도 마음에 들었습니다.
if 문 처리가 깔끔하다
fun main() {
val a = readLine()!!
var result = ""
for (i in a) {
result += if (i.isUpperCase()) {
i.lowercaseChar()
} else {
i.uppercaseChar()
}
}
println(result)
}
if 문에서 나온 결과를 따로 처리하지 않고, 바로 대입할 수 있던 부분이 좋았습니다.
Switch 문이 더 깔끔하다
when {
x > 0 && y > 0 -> println(1)
x < 0 && y > 0 -> println(2)
x < 0 && y < 0 -> println(3)
x > 0 && y < 0 -> println(4)
}
위와 같이, 꼭 한 변수에 대해서만 switch case를 처리할 필요가 없다는 점도 마음에 들었습니다.
java 라면 case 를 다 달아줘야 한다던가, break를 무조건 해야 한다던가도 없어서 좋았고요
String에 변수를 편하게 사용할 수 있다.
java 라면 "variable : " + variable 형태로 작성해야 할 것을
"variable: ${variable}" 형태로 작성할 수 있어서 편했습니다.
Null 일 경우에 처리 연산자가 따로 있어서 좋았습니다.
val line = readLine() ?: break
위와 같이, null 일 경우에, break를 호출하는 부분이 if 분기 없이 처리가 가능했던 것이 좋았습니다.
덧셈 결과가 직관적이라서 좋았습니다.
java에서 char + int 라면 int 타입이 나오지만
Kotlin에서는 Char + Int 라면 Char 타입이 나오는 것처럼, 직관적인 타입이 나와서 이런 부분도 좋았습니다.
val char1: Char = 'a'
val char2: Int = 1
val char3: Char = char1 + char2
후기
쓰다 보니 정말 좋은 점이 많았네요
코틀린을 왜 저렇게까지 많이 사용하는지 알 수 있는 시간이었습니다.