[Kotlin] 코틀린이란 (왜 필요하고, 왜 배워야할까)
✅ 코틀린이란?
JetBrains에서 개발한, 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어이다.
자바와 똑같이 JVM 위에서 작동한다! (OS에 독립적이라는 장점이 그대로 있다!)
주 목적 : 자바가 사용되는 용도에 적합하고, 자바의 단점을 극복하며 간결하고 안전한 대체용 언어
✍️ 코틀린의 특징 (장점)
- 간결하고 표현력이 뛰어나 개발자의 생산성을 높혀준다.
- 자바와 100%호환되어 상호 운용성을 갖는다.
- 대부분의 자바 프로젝트에서 활용 가능하다 (안드로이드/ 서버 개발 등)
- 성능이 자바와 비슷하다
- Null 체크, 타입추론 캐스팅 등에서 안전성을 보장한다.
✅ 코틀린은 왜 배워야할까?
언젠가 코프링이라는 단어를 들어본적이 있다.
많은 기업들이 자바+스프링을 사용하던 기존의 프로젝트를
코틀린+스프링으로 개선하는 과정을 거치고 있다는 이야기인데...
왜 기존 자바+스프링에서 >> 코틀린+스프링을 함께 사용하려고 하는걸까?
코틀린을 도입하는게, 자바만 사용하는것보다 더 좋은점이 무엇일까?
이런것을 알아보기 전에 일단 자바와 코틀린이 100% 호환된다는점을 다시 한번 주목하자.
기존 자바 코드를 코틀린 코드로 유연하게 변경할 수 있다.
기존 자바 코드를 코틀린 코드로 상속, 구현하는것도 가능하다.
즉 기존의 코드를 수정하지 않고도, 유연하고 간결하게 변경이 가능하고, 앞으로 만들어질 기능들에 대해서도 코틀린으로 작성이 가능하다.
🤔 자바의 단점과 그것을 보완하는 코틀린
1️⃣ 반복적인, 작업을 요구하는 보일러플레이트 코드의 발생 (자바)
✍️ 보일러플레이트 코드란?
반복적으로, 변화없이 여러군데에서 반복되는 코드
Getter, Setter
Null Check
예외처리 등
https://www.wisewiredbooks.com/term-dict/common/boilerplate.html
👩💻 예제코드
Java
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Kotlin : data class를 사용하여 필드, Getter/Setter, 생성자를 자동 생성함으로써 보일러플레이트 코드가 개선된다.
data class Person(var name: String)
2️⃣ NullPointer예외의 발생 (자바)
자바에서는 NPE을 처리하기 위해 null체크 코드가 추가되어야 했었다.
public String getDepartmentName(Employee employee) {
if (employee != null) {
Department department = employee.getDepartment();
if (department != null) {
return department.getName();
}
}
return "Unknown";
}
코틀린을 통하면 ? 를 이용하여 간결하게 널안전성을 부여할 수 있다.
fun getDepartmentName(employee : Employee?): String {
val departmentName = employee?.department?.name
return departmentName ?: "Unknown"
}
// 세이프 콜(?.)
// 엘비스 연산자(?:)
3️⃣ 익명 클래스의 번거로움 개선
- 익명클래스는 클래스선언과 인스턴스 생성이 동시에 이루어진다 (이름이 없는 함수로 1번 사용되고 더이상 사용되지 않는다)
따라서 코드가 복잡하고, 가독성이 떨어질 수 있다. - 익명클래스는 재사용이 어려워서, 만약 동일한 동작이 발생할 경우 재사용하기 어렵다.
- 익명클래스의 경우 자신을 감싸는 메서드/블록 내에서만 사용가능하고 외부에선 접근할 수 없어 사용되는 범위가 제한적이다.
- 이름이 없어서 익명클래스를 디버깅하기 어려울 수 있다.
만약 안드로이드 애플리케이션을 만든다고 가정해보자.
안드로이드 앱에 수많은 버튼에는 각각의 클릭이벤트를 처리해야하는데, 이를 익명클래스로 작성하게 되면 코드가 길어진다.
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 클릭시 발생할 이벤트 코드 작성
}
});
코틀린은 람다식/ 고차함수를 지원하여 익명함수를 간단하게 작성할수 있다.
button.setOnClickListener {
// 클릭시 발생할 이벤트 코드 작성
// ex )상품 A의 정보를 요청하는 코드
}
✔️ 람다식
- 함수형 프로그래밍에서 사용되는 개념
- 익명함수를 간단하게 표현하기 위한 방법
- 함수처럼 동작하고, 코드블록을 하나의 식으로 표현 가능하다.
✔️ 고차함수
- 함수를 매개변수로 전달하거나, 함수를 반환하는 함수
- 고차함수를 사용했을 때 함수를 값으로 다루고, 동적으로 조작 활용이 가능하다.
즉 아래 코드는 람다식으로 작성되었으며, 고차함수인 button.setOnClickListener에 익명함수/람다식을 전달하는것이다.
button.setOnClickListener {
//상품 A의 정보를 요청하는 코드
}
button.setOnClickListener는 클릭이벤트가 발생했을 때 실행될 코드를 인자로 받는다.
람다식의 본문에 해당하는 { //상품 A의 정보를 요청하는 코드 } 가 인자로 전달되어 실행된다.
📱 안드로이드 어플리케이션과 호환성
코틀린은 안드로이드에서도 공식적으로 지원하는 언어이다!
(구글의 연례 개발자 행사인 구글I/O 2017에서 채택되었다)
안드로이드와 백엔드 모두에서 공통적으로 코틀린을 사용하게 되면, 다음과 같은 장점이 생길수 있다고 하는데...
실무를 경험하지 못한 내가 이걸 확신해서 말할수는 없으니,, 좀더 조사를 해보자
(chat gpt)
* 코틀린은 자바와 100% 호환되기 때문에, 안드로이드 앱과 백엔드 시스템 사이에 공유 코드를 작성할 수 있다.
공통 모듈을 코틀린으로 작성하여 안드로이드 앱과 백엔드 시스템 모두에서 사용할 수 있으며, 이는 코드의 재사용성을 높이고 개발 시간을 단축시키는 데 도움을 준다.
https://www.wisewiredbooks.com/term-dict/common/boilerplate.html
https://levelup.gitconnected.com/benefits-of-kotlin-over-java-backend-and-android-1aa61eaad337
https://ktko.tistory.com/entry/%EC%BD%94%ED%8B%80%EB%A6%B0%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%9C%EA%B0%80