개발/Java, Kotlin

[Kotlin] 코틀린이란 (왜 필요하고, 왜 배워야할까)

Kangjieun11 2023. 5. 23. 00:28
728x90

 

코틀린이란? 

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. 익명클래스는 클래스선언과 인스턴스 생성이 동시에 이루어진다 (이름이 없는 함수로 1번 사용되고 더이상 사용되지 않는다)
    따라서 코드가 복잡하고, 가독성이 떨어질 수 있다. 
  2. 익명클래스는 재사용이 어려워서, 만약 동일한 동작이 발생할 경우 재사용하기 어렵다.
  3. 익명클래스의 경우 자신을 감싸는 메서드/블록 내에서만 사용가능하고 외부에선 접근할 수 없어 사용되는 범위가 제한적이다.
  4. 이름이 없어서 익명클래스를 디버깅하기 어려울 수 있다.

 
 
 
만약 안드로이드 애플리케이션을 만든다고 가정해보자.
안드로이드 앱에 수많은 버튼에는 각각의 클릭이벤트를 처리해야하는데, 이를 익명클래스로 작성하게 되면 코드가 길어진다.  

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