[Kotlin] Kotlin에 대해

JuYong-Kim·2022년 10월 12일
0

Kotlin 정복

목록 보기
1/3
post-thumbnail

1. 왜 그거 써?

안드로이드를 처음 개발할 때 선택할 수 있는 언어는 Java, Kotlin 두 가지가 있다. 나는 Java를 잘하는 편도 아니였고, 최근엔 모두 코틀린으로 개발하고 있다는 말에 Java를 건너 뛰고 바로 Kotlin으로 안드로이드 개발을 시작했다.

그렇게 코틀린으로 안드로이드 개발을 하다가 최근에 인턴으로 출근하는 첫날 코드를 열었는데...

그렇다. 구글에서 코틀린을 공식 언어로 정하고 밀어준 것이 2017년... 그걸 카카오에서 적용한 사례가 2018년... 즉, 그 전에 만들어진 앱일 경우 다 Java 로 구현된 앱이라는 것이다.

물론 뒤에 언급하겠지만 코틀린자바100% 연동되기도 하고 개발이라는 큰 틀은 변하지 않기 때문에 개발에 큰 문제는 없다.

하지만 적어도 주위에서 "왜 코틀린으로 개발했어요?" 하는 질문에는 대답할 수 있어야한다.

2. 그거 뭔데?

IntlliJ의 개발사 JetBrains에서 개발한 코틀린자바 스칼라 처럼 JVM 기반의 새로운 프로그래밍 언어로 자바와 상호운용성을 중시하면서도 더 간결한 문법다양한 기능을 추가한 언어이다.

그럼, 코틀린의 주요 특성을 4가지를 알아보자.

1. 정적•동적 타입 언어 둘 다 하고싶어!

기본은 정적 타입 언어

  • 변수 함수 반환 등 타입을 프로그래머가 직접 정해줘야 하는 정적 타입 언어이다.

컴파일 시점(실행 전)에 자료형(type)이 결정되고 컴파일러가 자료형(type)을 검증하기 때문에 안전하고 정확하다는 장점이 있다.

하지만 항상 프로그래머가 타입을 지정해줘야 하기 때문에 때론 귀찮고 코드가 길어지게 만드는 범인이기도 하다.

그래서 코틀린은 동적 타입 지원을 위해 타입 추론을 지원한다!

타입 추론을 곁들인..

  • 코틀린 컴파일러는 문맥상 타입을 자동으로 유추할 수 있도록 해서 타입 선언을 생략할 수 있다.

아래 코드 처럼 변수를 타입 지정없이 사용해도 컴파일러가 이를 알아서 처리해준다는 것이다!!

    var num = 13
    num = 10	// OK
    num = 10.0	// Error	
    num = "Hello World"	//Error

타입을 정적으로 정해야 하는 것은 맞으나, 프로그래머의 편의성과 코드의 간결성을 위해 컴파일러 차원에서 타입 추론을 통해 이를 알아서 처리 해주는 것이다.

2. 자바는 제 형님입니다.

코틀린은 자바를 기반으로 만들어졌기 때문에 자바100% 호환된다.
코틀린 컴파일러자바 중간코드(Byte Code)를 생성할 수 있기 때문에 자바 라이브러리를 그대로 사용하는 것도 가능하고 자바 코틀린을 섞어서 쓰는 것도 가능하다!

안드로이드 스튜디오는 자바 코드를 코틀린으로 자동으로 변환도 해준다. 코틀린 코드를 Decomplier를 통해 보면 자바 코드로 변환된 것을 알 수 있다.

3. 객체지향•함수형 프로그래밍 둘 다 하고 싶어!

프로그래밍을 하는 사람이라면 객체지향 프로그래밍에 대해서는 많이 듣고 공부했을 것이다. 코틀린객체지향 프로그래밍 패러다임과 더불어 함수형 프로그래밍 패러다임을 함께 따른다.

객체지향 프로그래밍

프로그램을 여러 개의 독립된 단위인 객체의 모임으로 파악하고자 하는 시각으로 각각의 객체는 서로 메시지를 주고 받고 데이터를 처리할 수 있는 프로그래밍 패러다임이다.

  • 클래스에 하나의 문제 해결을 위한 데이터와 메서드를 모아놓는다. ▶︎ 응집력(Cohesion) 강화
  • 각 클래스가 독립적으로 존재하도록 디자인한다. ▶︎ 결합력(Copupling) 약화
  • 클래스(Class) : 같은 종류(또는 문제 해결을 위한) 집단에 속하는 속성과 행위를 정의한 사용자 정의 데이터 타입으로 다른 클래스 또는 외부 요소와 독립적으로 디자인 되어야 한다.
  • 객체(Object): 클래스의 인스턴스(실제로 메모리에 할당되어 동작하는 모양을 갖춘 것, Instance). 객체는 자신 고유의 속성이 있고 클래스에서 정의한 행위를 할 수 있다.
  • 메서드(Method)∙메시지(Message): 객체가 클래스에 정의된 행위를 실질적으로 하는 함수. 객체에 명령을 전달하거나 객체 간에 명령(데이터) 전달이 메서드(메시지)를 통해 이루어 진다.

함수형 프로그래밍

함수형 프로그래밍이란 문제에 대한 접근 방식 중 하나로, 데이터 처리를 수학적 함수의 계산으로 취급하고 상태 변경 및 변경 가능한 데이터를 피하는 프로그래밍 패러다임이다. 이는 다음과 같은 특징을 가진다.

  • 순수하게 함수에 전달된 인자 값만이 결과에 영향을 주기 때문에 상태 값을 갖지 않고 순수하게 함수만으로 동작한다. ► 어떤 상황에서 프로그램을 실행하더라도 일정하게 같은 결과를 도출할 수 있어짐
  • 프로그램 동작 과정에서 상태(값)가 변하지 않으면 함수 호출이 각각 상호 간섭 없이 배타적으로 실행된다. ► 대규모 병렬처리에 강점을 가진다.
  • 함수를 일급 객체(First-Class Citizen)로 다룬다. ► 다양한 종류의 함수를 호출, 전달, 반환하는 등의 동작만으로도 프로그램을 구현할 수 있다.
    • 일급 객체란?
      • 전달 인자로 전달할 수 있다.
      • 동적 프로퍼티 할당이 가능하다.
      • 변수, 데이터 구조 안에 담을 수 있다.
      • 반환 값으로 사용할 수 있다.
      • 할당될 때 사용한 이름과 관계없이 고유한 객체로 구별가능하다.
class MethodProgramming { //함수형 프로그래밍

    fun doSomething(){
        print("do something")
    }
    
    fun doAnotherThing(){
        print("do another thing")
    }
    
    fun execute(tasks:[() -> Void]){
        for task in tasks {
            task()
        }
    }
    
}

execute(tasks: [doAnotherThing, doSomething]) //호출부

호출부 execute에서 함수를 인자로 넘기는 것을 볼 수 있다. 이렇게 하면 코드를 간결하고 우아하게, 더 강력한 추상화와 중복 코드를 제거할 수 있게 된다! 이 외에도 이 같은 장점을 살리기 위해 컬렉션 고차함수 API, 람다 식 등을 언어 차원에서 지원한다.

4. NPE 에서 자유롭다!

코틀린은 언어 차원에서 NULL-Safety를 지원한다! 개발하면서 제일 자주 마주치는 NULLPointerException을 방지하기 위함이다.

NULLPointerException 은 보통 개발자가 고려하지 않았거나 의도하지 않은 상황에서 변수에 null이 담겨 발생하는 경우가 많다.

코틀린 은 이런 상황을 방지하기 위해 컴파일 시점에서 NULLPointerException이 발생할 수 있는 위험성을 검사해준다!

어떻게?

코틀린 타입 시스템에서 null 값이 되면 안되는 값을 추적해주고, 실행 시점에서 NULLPointerException 을 발생시킬 수 있는 연산 및 코드가 있다면 빌드 자체를 못하게 한다. 더 구체적으로 알아보자.

코틀린Null-Safety를 위해 null을 담을 수 있는 타입과 없는 타입을 구분하여 사용한다. null을 할당할 수 있는 타입을 Nullable 타입이라고 하며 타입 뒤에 ? 을 붙여서 아래와 같이 선언한다.

var str: String = null	//Error
var str: String? = null	// OK

3. 그래서?

가장 유명한 코틀린 언어의 장점을 소개했다. 물론 이 외에도 더 많은 장점이 있지만 대표적인 특징 4가지이다.

결국, 이 모든 특징이 말하는 것은 코틀린은 개발자들이 더 편리하게 더 우아하게 더 간결하게 프로그래밍을 할 수 있도록 설계된 언어라는 것이다.

간단하게 생각해보면 많은 IT기업들이 코틀린으로 앱 개발을 하고 있다. 기업들은 이득(돈)이 되지 않으면 움직이지 않는다. 즉, 코틀린을 사용하는 것이 기존 자바 보다 더 득이 되기 때문에 코틀린을 채택하고 있다고 생각할 수 있다.

물론 2017년에 공식 지정된 언어이기 때문에 내가 겪었던 것 처럼 자바 언어로 작성된 프로그램을 마주할 수도 있다. 하지만 멘토님의 말을 빌리자면..

결국 개발자가 공부하는 것은 코틀린, 자바 같은 언어를 공부하는 것이 아니라 프로그래밍을 잘 하는 것이 중요하다.

즉, 언어는 도구일 뿐이고 우리는 적시적소에 그 도구를 선택하기 위한 개념을 가지고 있는 것이 중요하다고 생각한다. 안드로이드 개발 관점에서는 자바 보다는 코틀린이 가지는 장점이 훨씬 많기 때문에 코틀린이라는 도구를 선택하는 것이 합리적일 확률이 높다.

여담으로 결국 인턴 당시 결국 자바로 프로그래밍을 했는데 코틀린을 더욱 찬양하게 되는 계기가 되었다..

profile
Hello World!

0개의 댓글