728x90
반응형
✅ 코틀린이란??
젯브레인즈사에서 개발하는 크로스 플랫폼 범용 프로그래밍 언어로, 자바와 완벽하게 호환되게 설계되었으며 일반적으로 JVM에서 사용되나 자바스크립트, LLVM 그리고 데이터 사이언스 영역에서도 사용 가능하다.
코틀린은 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어
- 코틀린은 간결하고 실용적이며, 자바 코드와의 상호운용성(Interoperability)을 중시
- 현재 자바가 사용 중인 곳이라면 거의 대부분 코틀린을 활용할 수 있음
- 대표적으로 서버, 안드로이드 앱 개발 등의 분야에서 사용 가능
- 코틀린은 기존 자바 라이브러리나 프레임워크와 함께 잘 작동하며, 성능도 자바와 같은 수준
✅ 정적 타입 지정 언어
- 자바와 마찬가지로 정적 타입 지정 언어
- 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메서드를 사용할 때마다 컴파일러가
타입을 검증해준다는 뜻 - 자바와의 차이점은 코틀린에서는 모든 변수의 타입을 프로그래머가 직접 명시할 필요가 없음
var x = 1 # 코틀린은 이 변수의 타입이 Int임을 자동으로 알아냄
- 이처럼 컴파일러가 문맥을 고려해 변수 타입을 결정하는 기능을 타입 추론이라고 부름
❗️ 정적 타입 지정의 장점
- 성능 : 실행 시점에 어떤 메서드를 호출할지 알아내는 과정이 필요 없으므로 메서드 호출이 더 빠름
- 신뢰성 : 컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 프로그램이 오류로 중단될 가능성이 더 적어짐
- 유지 보수성 : 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때도 더 쉬움
- 도구 지원 : 정적 타입 지정을 활용하면 더 안전하게 리팩토링할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공할 수 있으며, IDE의 다른 지원 기능도 더 잘 만들 수 있음
- 코틀린은 타입 추론을 지원하기 때문에 타입을 선언해야 하는 불편함이 대부분 사라짐
- 클래스, 인터페이스, 제네릭스는 모두 자바와 비슷하게 작동
- 이 외에도 코틀린의 중요한 특성 중 하나는 널이 될 수 있는 타입(Nullable Type)을 지원한다는 점
-> 그로 인해 컴파일 시점에 널 포인터 예외가 발생할 수 있는지 여부를 검사할 수 있어 좀 더 프로그램의 신뢰성을 높일 수 있음 - 또 다른 특성으로는 함수 타입(Function Type)에 대한 지원
✅ 함수형 프로그래밍과 객체지향 프로그래밍
❗️ 함수형 프로그래밍의 핵심 개념
- 일급 시민인 함수 : 함수를 일반 값처럼 다룰 수 있어, 함수를 변수에 저장할 수 있고, 함수를 인자로 다른 함수에 전달할 수 있으며, 함수에서 새로운 함수를 만들어서 반환할 수 있음
- 불변성 : 함수형 프로그래밍에서는 일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그램을 작성
- 부수 효과 없음 : 함수형 프로그래밍에서는 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수를 사용함
함수형 스타일로 프로그램을 작성하면 얻는 이득은?
1. 간결성 : 함수형 코드는 그에 상응하는 명령형 코드에 비해 더 간결하며 우아함
fun findAlice() = findPerson {it.name == "Alice"} // findPerson에는 사람을 찾는 일반 로직이 들어가 있음
fun findBob() = findPerson {it.name == "Bob"} // 중괄호 사이에 있는 코드 블럭은 찾으려는 사람 식별
// 람다식이라 불리는 무명함수 구문을 사용하면 간결하게 함수를 표현할 수 있음
2. 다중 스레드를 사용해도 안전함
- 다중 스레드 프로그램에서는 적절한 동기화 없이 같은 데이터를 여러 스레드가 변경하는 경우 가장 많은 문제가 생기지만 불변 데이터 구조를 사용하고 순수 함수를 그 구조에 적용한다면 같은 데이터를 여러 스레드가 변경할 수 없음
3. 테스트하기 쉬움
- 부수 효과가 있는 함수는 그 함수를 실행할 때 전체 환경을 구성하는 준비 코드가 필요하지만 순수함수는 독립적으로 테스트 가능
- 자바도 함수형 프로그래밍을 지원하지만 충분한 라이브러리와 문법 지원을 제공하지는 않음
- 하지만 코틀린의 경우 처음부터 함수형 프로그래밍을 풍부하게 지원해 왔으며 그 지원은 아래와 같음
- 함수 타입을 지원함에 따라 어떤 함수가 다른 함수를 파라미터로 받거나 함수가 새로운 함수를 반환할 수 있음
- 람다 식을 지원함에 따라 번거로운 준비 코드를 작성하지 않아도 코드 블록을 쉽게 정의하고 여기저기 전달할 수 있음
- 데이터 클래스는 불변적인 값 객체를 간편하게 만들 수 있는 구문을 제공
- 코틀린 표준 라이브러리는 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API를 제공
- 그렇다고 해서 코틀린은 함수형 프로그래밍을 강제하지 않으며, 객체지향과 함수형 접근 방법을 함께 조합해 문제에 가장 적합한 도구를 사용하면 됨
✅ 코틀린의 철학
코틀린은 자바와의 상호운용성에 초점을 맞춘 실용적이고 간결하며 안전한 언어?
- 코틀린이 상호운용성이 좋고, 실용적이며, 간결하고, 안전한 언어라고 설명되는 이유가 무엇일까
❗️ 실용성
- 코틀린은 실제 문제를 해결하기 위해 만들어진 실용적인 언어
- Java의 불편한 점을 개선하고 간소화하는 방향으로 만들어졌음
- Null에 대한 문제를 많이 개선하였으며 타입 추론을 통해 코드가 간결해졌음
❗️간결성
- 프로그래머가 작성하는 코드에서 의미 없는 부분을 줄이고, 언어가 요구하는 구조를 만족시키기 위해 노력을 많이 기울였음
- 예를 들어, Getter와 Setter와 관련된 준비 코드를 묵시적으로 제공함
- 또한, 람다 식을 통해 간결한 프로그래밍이 가능함
❗️ 안전성
- 코틀린은 JVM에서 실행되는 정적타입 지정 언어이기 때문에 애플리케이션의 타입 안전성을 보장함
- 실행 시점에서 오류를 발생시키는 대신 컴파일 시점 검사를 통해 오류를 더 많이 방지해 줌
- 가장 중요한 점으로 NullPointerException을 컴파일 시점에 잡아줄 수 있음
❗️ 상호 운용성
- 자바의 기존 라이브러리를 그대로 사용할 수 있음
- 자바와 코틀린 소스 파일을 자유롭게 내비게이션 할 수 있음
- 자바 메서드를 리팩토링해도 그 메서드와 관련 있는 코틀린 코드까지 제대로 변경(역으로도 가능)
✅ 코틀린의 빌드 과정
- 코틀린 소스코드를 저장할 때는 보통 .kt라는 확장자를 파일에 붙임
- 코틀린 컴파일러는 자바 컴파일러가 자바 코드를 컴파일할 때와 마찬가지로 코틀린 코드를 분석 후 .class 파일을 만들어 냄
- 만들어진 .class 파일은 개발 중인 애플리케이션의 유형에 맞는 표준 패키징 과정을 거쳐 실행될 수 있음
- 코틀린 컴파일러로 컴파일한 코드는 코틀린 런타임 라이브러리에 의존
- 런타임 라이브러리에는 코틀린 자체 표준 라이브러리 클래스와 코틀린에서 자바 API의 기능을 확장한 내용이 들어있음
- 코틀린으로 컴파일한 애플리케이션을 배포할 때는 런타임 라이브러리도 함께 배포해야 함
728x90
반응형
'Studying > Kotlin' 카테고리의 다른 글
[Kotlin In Action] 3장. 함수 정의와 호출(1) - 컬렉션과 함수 만들기 (0) | 2023.05.02 |
---|---|
[Kotlin In Action] 2장. 코틀린 기초(4) - 코틀린의 예외 처리 (0) | 2023.04.24 |
[Kotlin In Action] 2장. 코틀린 기초(3) - while과 for 루프 (0) | 2023.04.24 |
[Kotlin In Action] 2장. 코틀린 기초(2) - enum과 when (0) | 2023.04.24 |
[Kotlin In Action] 2장. 코틀린 기초(1) - 함수와 변수 / 클래스와 프로퍼티 (0) | 2023.04.20 |