728x90
반응형
코틀린 응용
코틀린은 주로 서버와 안드로이드 개발에서 널리 사용되고 있음
코틀린 서버 프로그래밍
다음과 같은 응용 분야를 포함하는 여러 분야가 서버 프로그래밍에 포함됨
-
브라우저에 HTML 페이지를 돌려주는 웹 애플리케이션
-
모바일 애플리케이션에게 HTTP를 통해 JSON API를 제공하는 백엔드 애플리케이션
-
RPC(원격 프로시저 호출) 프로토콜을 통해 서로 통신하는 작은 서비스들로 이뤄진 마이크로서비스
개발자들은 이런 애플리케이션을 수년간 자바로 개발해 오면서 이런 종류의 애플리케이션 개발에 도움을 줄 수 있는 기술과 프레임워크를 엄청나게 만들어왔음
이런 환경에서 자바 코드와 매끄럽게 상호운용할 수 있다는 점이 코틀린의 큰 장점임
자바 클래스를 코틀린으로 확장해도 아무 문제가 없으며, 코틀린 클래스 안의 메소드나 필드에 특정 (자바) 애노테이션을 붙어야 하는 경우에도 아무 문제가 없음
그러면서도 시스템 코드는 더 간결해지고 더 신뢰성이 높아지며, 더 유지 보수하기 쉬워질 것임
코틀린 안드로이드 프로그래밍
모바일 애플리케이션은 엔터프라이즈 애플리케이션보다 더 작고 기존 코드 기반과 새 코드를 통합할 필요도 더 적음
또 모바일 애플리케이션은 보통 더 다양한 디바이스에 대해 서비스의 신뢰성을 보장하면서 더 빠르게 개발해 배포할 필요가 있음
코틀린 언어의 특성과 안드로이드 프레임워크의 특별한 컴파일러 플러그인 지원을 조합하면 안드로이드 애플리케이션 개발의 생산성을 더 높이고 개발의 즐거움을 더할 수 있음
또는 코틀린을 사용하면 애플리케이션의 신뢰성이 더 높아짐
안드로이드이 앱을 개발해 본 독자라면 '프로세스가 중단됨(Process Has Stopped)' 대화상자를 본 일이 많을 것임
이 대화상자는 주로 처리되지 않는 예외(NullPointerException이 주로 발생)가 발생한 경우에 표시됨
코틀린 타입 시스템은 null 값을 정확히 추적하며 널 포인터로 생기는 문제를 줄여줌
한편 코틀린은 자바 6와 완전히 호환됨
따라서 호환성과 관련한 새로운 문제를 야기하지 않음
코틀린을 사용하더라도 성능 측면에서 아무 손해가 없음
코틀린 컴파일러가 생성한 바이트코드는 일반적인 자바 코드와 똑같이 효율적으로 실행됨
코틀린의 철학
코틀린이 자바와의 상호운용성에 초점을 맞춘 실용적으로 간결하며 안전한 언어라고 설명하는 경우가 자주 있음
그렇다면 실용성, 간결성, 안전성, 상호운용성은 각각 어떤 뜻일까?
실용성
코틀린은 다른 프로그래밍 언어가 채택한 이미 성공적으로 검증된 해법과 기능에 의존함
이로 인해 언어의 복잡도가 줄어들고 이미 알고 있는 기존 개념을 통해 코틀린을 더 쉽게 배울 수 있음
거기에 코틀린은 어느 특정 프로그래밍 스타일이나 패러다임을 사용할 것을 강제로 요구하지 않는음
코틀린을 처음 배우는 사람은 자바에서 사용해 온 익숙한 프로그래밍 스타일이나 기법을 활용할 수 있음
나중에 코틀린의 더 강력한 특성을 발견하고 그런 특성을 자신의 코드에 적용하는 방법을 배우고 나면 그 특성을 잘 활용해서 간결하게 코드를 작성할 수 있음
코틀린의 여러 특성을 배울 때도 IDE의 코틀린 언어 지원이 중요한 역할을 함
흔히 쓰이지만 더 간결한 구조로 바꿀 수 있는 대부분의 코드 패턴을 도구가 자동으로 감지해서 수정하라고 제안함
간결성
개발자가 코드를 새로 작성하는 시간보다 기존 코드를 읽는 시간이 더 길다는 사실이 잘 알려져 있음
코드가 더 간단하고 간결할수록 내용을 파악하기가 더 쉽다. 물론 설계가 좋고 각 부분의 역할을 잘 표현해주는 적절한 이름이 붙어있다면 내용을 파악할 때 큰 도움이 됨
그러나 어떤 언어를 사용해 코드를 작성했고 그 언어가 얼마나 간결한 언어인지도 중요함
코틀린을 만들면서 프로그래머가 작성하는 코드에서 의미가 없는 부분을 줄이고, 언어가 요구하는 구조를 만족시키기 위해 별 뜻은 없지만 프로그램에 꼭 넣어야 하는 부수적인 요소를 줄이기 위해 많은 노력을 기울였음
getter, setter, 생성자 파라미터를 필드에 대입하기 위한 로직 등 자바에 존재하는 여러 가지 번거로운 준비 코드를 코틀린은 묵시적으로 제공하기 때문에 코틀린 소스코드는 그런 준비 코드로 인해 지저분해지는 일이 없음
코드가 불필요하게 길어지는 또 다른 이유는 컬렉션에서 원소를 찾는 것과 같은 일반적인 작업을 수행하기 위해 명시적으로 작성해야만 하는 코드의 양이 상당하기 때문
코틀린은 람다를 지원하기 때문에 작은 코드 블록을 라이브러리 함수에 쉽게 전달할 수 있음
따라서 일반적인 기능을 라이브러리 안에 캡슐화하고 작업에 따라 달라져야 하는 개별적인 내용을 사용자가 작성한 코드 안에 남겨둘 수 있음
코드가 더 간결하면 쓰는 데 시간이 덜 걸림
더 중요한 것은 읽는 데도 시간이 덜 걸린다는 점
간결성은 여러분의 생산성을 향상시켜주고 개발을 더 빠르게 진행할 수 있게 해줌
안전성
일반적으로 프로그래밍 언어가 안전하다는 말은 프로그램에서 발생할 수 있는 오류 중에서 일부 유형의 오류를 프로그램 설계가 원칙적으로 방지해준다는 뜻임
물론 이는 절대적이지는 않음
어떤 언어도 발생할 수 있는 모든 오류를 막을 수는 없음
코틀린을 JVM에서 실행한다는 사실은이미 상당한 안전성을 보장할 수 있다는 뜻임
예를 들어 JVM을 사용하면 메모리 안전성을 보장하고, 버퍼 오버플로우를 방지하며, 동적으로 할당한 메모리를 잘못 사용함으로 인해 발생할 수 있는 다양한 문제를 예방할 수 있음
코틀린은 타입 자동 추론을 사용하여 애플리케이션의 타입 안전성을 보장함
또한, 실행 시점에 오류를 발생시키는 대신 컴파일 시점 검사를 통해 오류를 더 많이 방지해줌
가장 중요한 내용으로 코틀린은 프로그래밍의 NullPointerException을 없애기 위해 노력함
코틀린의 타입 시스템은 null이 될 수 없는 값을 추적하며, 실행 시점에 NullPointerException이 발생할 수있는 연상을 사용하는 코드를 금지함
val s: String? = null // 널이 될 수 있음
var s2: String = "" // 널이 될 수 없음
코틀린이 방지해주는 다른 예외로는 ClassCastException이 있음
자바에서는 타입 검사와 그 직후 이뤄지는 타입 캐스트에서 같은 타입 이름을 반복사용하는 것이 귀찮아서 타입 검사를 생략하는 개발자가 많음
반면 코틀린에서는 타입 검사와 캐스트가 한 연산자에 의해 이뤄짐
if (value is String) // 타입을 검사한다.
println(value.toUpperCase()) // 해당 타입의 메소드를 사용한다.
상호운용성
상호운용성과 관련해 자바 프로그래머들이 던지는 첫 번째 질문은 아마도 "기존 라이브러리를 그대로 사용할 수 있느냐?"일 것임
코틀린은 라이브러리가 어떤 API를 제공하던 간에 코틀린에서 그 API를 활용할 수 있음
자바 메소드를 호출하거나 자바 클래스를 상속(확장)하거나 인터페이스를 구현하거나 자바 애노테이션을 코틀린 코드에 적용하는 등의 일이 모두 가능함
기존 자바 프로젝트에 코틀린을 도입하는 경우 자바를 코틀린으로 변환하는 도구를 실행해서 그 클래스를 코틀린 클래스로 변환할 수 있음
상호운용성 측면에서 코틀린이 집중하는 다른 방향으로는 기존 자바 라이브러리를 가능하면 최대한 활용한다는 점을 들 수 있음
예를 들어 코틀린은 자체 컬렉션 라이브러리를 제공하지 않음
코틀린은 자바 표준 라이브러리 클래스에 의존함
코틀린이 제공하는 도구도 다중 언어 프로젝트를 완전히 지원함
코틀린은 자바와 코틀린 소스 파일이 임의로 섞여 있어도 제대로 컴파일할 수 있음
따라서 다음과 같은 동작이 가능함
-
자바와 코틀린 소스 파일을 자유롭게 내비게이션 할 수 있음
-
여러 언어로 이뤄진 프로젝트를 디버깅하고 서로 다른 언어로 작성된 코드를 언어와 관계없이 한 단계씩 실행할 수 있음
-
자바 메소드를 리팩토링해도 그 메소드와 관련 있는 코틀린 코드까지 제대로 변경된다. 역으로 코틀린 메소드를 리팩토링해도 자바 코드까지 모두 자동으로 변경됨
참고자료
https://incheol-jung.gitbook.io/docs/study/kotlin-in-action/1
반응형
'프로그래밍 > Kotlin' 카테고리의 다른 글
코틀린 기초(while과 for) (0) | 2022.01.11 |
---|---|
코틀린 기초(enum과 when) (0) | 2022.01.10 |
코틀린 기초(클래스와 프로퍼티) (0) | 2022.01.06 |
코틀린 기초(함수와 변수) (0) | 2022.01.05 |
코틀린이란? (0) | 2022.01.03 |