🟨 목 차 🟨
1. Kotlin(코틀린) 이란
2. Kotlin(코틀린)의 장점
3. Kotlin(코틀린)의 목적
4. Kotlin(코틀린)의 특징
4-1. 타입
4-1-1. 정적 타입 지정 언어
4-1-2. Null이 될 수 있는 타입
4-1-3. 타입 추론
4-2. 함수형 프로그래밍
4-2-1. 일급 객체인 함수
4-2-2. 불변성
4-2-3. 부수 효과 없음
4-3. 상호운용성
5. 코틀린 컴파일러
5-1. 코틀린 컴파일러 순서
◼️ 1. Kotlin(코틀린) 이란 ◼️
IntelliJ IDEA의 개발사 JetBrains에서 2011년에 공개한 오픈 소스 프로그래밍 언어. JVM 기반의 언어이며, Java와 유사하지만 더 간결한 문법과 다양한 기능을 추가하였다. Java와의 상호 운용이 100% 지원된다. JVM 바이트코드가 기본이지만, Kotlin/Native 컴파일러를 사용하여 기계어로 컴파일할 수 있다. 안드로이드, 스프링 프레임워크, 톰캣[2], JavaScript, Java EE, HTML5, iOS, 라즈베리 파이 등을 개발할 때 사용할 수 있다.
[ 여담 : 2017년에 구글이 안드로이드의 공식 언어로 Kotlin을 추가했다. ]
◼️ 2. Kotlin(코틀린)의 장점 ◼️
- 자바 코드와의 상호 운용
- 간결하고 실용적이면서 높은 활용성 [ 안드로이드, 스프링 프레임워크, 톰캣, JavaScript, Java EE, HTML5, iOS, 라즈베리 파이 ]
- 안정성(타입 검사와 Null 체크)
- 무료 오픈 소스
◼️ 3. Kotlin(코틀린)의 목적 ◼️
Kotlin(코틀린)의 목적은 자바가 사용되고 있는 모든 용도에 적합하면서 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것이다.
◼️ 4. Kotlin(코틀린)의 특징 ◼️
◼️ 4-1. 타입
◼️ 4-1-1. 정적 타입 지정 언어
자바와 마찬가지로 정적 타입 지정 언어이다. 여기서 정적 타입 지정 언어란 말은 모든 프로그래밍 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해준다는 말이다.
정적 타입 지정 언어가 가지는 장점으로는
- 신뢰성 : 실행 시 프로그램이 오류로 중단 될 가능성이 없다. 왜냐하면 컴파일러가 프로그램의 정확성을 검증해주기 때문이다.
- 유지보수성 : 컴파일러를 통해 객체가 어떤 타입에 속하는 지 알 수 있기 때문에 처음보는 코드를 다루기 쉽다.
- 성능 : 실행 시점에 어떤 메소드를 호출할 지 알아내는 과정이 없기때문에 메소드 호출이 더 빠르다.
[ 정적 타입( Java, Kotlin ) : 컴파일 단계에서 알고 있음 / 동적 타입( Python, JavaScrpit ) : 컴파일 단계에서 알 수 없음 ] - 도구 지원 : 정확한 코드 완성 기능을 제공하며, 동적 타입 지정 언어에 비해 IDE의 다른 지원 기능도 더 잘 만들 수 있다.
◼️ 4-1-2. Null이 될 수 있는 타입
흔히들 다른 프로그래밍 언어에서는 null값이 될 수 있는 타입을 제공 하지 않는다.
하지만 Kotlin(코틀린)은 null이 될 수 있는 타입을 지원함에 따라 컴파일 시점에 Null Pointer Exception이 발생할 수 있는지 여부를 검사 할 수 있다.
[Ex]
var a: String? = null // 가능. null을 넣을 수 있는 타입
var a: String = null //에러. null을 넣을 수 없는 타입
◼️ 4-1-3. 타입 추론
자바와 달리 코틀린에서는 모든 변수의 타입을 직접 명시할 필요가 없다. 왜냐하면 코틀린 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추하기 때문에 타입 선언을 생략해도 된다.
◼️ 4-2. 함수형 프로그래밍
◼️ 4-2-1. 일급 객체인 함수
함수(프로그램의 행동을 나타내는 코드 조각)를 일반 값처럼 다룰 수 있다. 함수를 변수에 저장할 수 있고, 함수를 인자로 다른 함수에 전달할 수 있으며, 함수에서 새로운 함수를 만들어서 반환할 수 있다.
◼️ 4-2-2. 불변성
함수형 프로그래밍에서는 일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그램을 작성한다.
◼️ 4-2-3. 부수 효과 없음
함수형 프로그래밍에서는 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수(pure function)를 사용한다.
◼️ 4-3. 상호운용성
- 자바의 기존 라이브러리들을 그대로 사용할 수 있다.(자바 코드에서 코틀린 코드를 호출할 때도 사용 가능)
- 자체 컬렉션 라이브러리를 제공하지 않고, 자바 표준 라이브러리에 의존한다.
- 코틀린이 제공하는 도구는 다중 언어 프로젝트를 완전히 지원한다.(코틀린과 자바의 소스 파일이 섞여 있어도 제대로 프로그램을 컴파일 가능)
◼️ 5. 코틀린 컴파일러 ◼️
코틀린 컴파일러로 컴파일한 코드는 코틀린 런타임 라이브러리에 의존한다. 이 라이브러리는 코틀린 자체 표준 라이브러리 클래스와 자바 API의 기능을 확장한 내용 등이 있다. (코틀린 컴파일한 애플리케이션을 배포할때는 런타임 라이브러리도 함께 배포해야함)
◼️ 5-1. 코틀린 컴파일러 순서
- Kotlin 컴파일러가 Kotlin 코드를 컴파일해 .class 파일을 생성한다. 이 과정에서 Kotlin 코드가 참조하는 Java 코드가 함께 로딩되어 사용된다.
- Java 컴파일러가 Java 코드를 컴파일해 .class 파일을 생성한다. 이때 이미 Kotlin이 컴파일한 .class 파일의 경로를 클래스 패스에 추가해 컴파일한다.
>> (코틀린 컴파일 ) -->> (자바 컴파일, 어노테이션 프로세싱)