-
Notifications
You must be signed in to change notification settings - Fork 0
CH01. 코틀린 소개 (이주영)
leeheefull edited this page Mar 20, 2023
·
1 revision
코틀린이란?
- 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어
- 간결하고 실용적
- 기존 자바 라이브러리나 프레임워크와 함께 잘 작동하며, 성능도 자바와 같은 수준
data class Person( // 데이터 클래스
val name: String,
val age: Int? = null // null이 될 수 있는 타입(Int?)과 파라미터 디폴트 값
)
fun main(args: Array<String>) { // 최상위 함수
val persons = listOf(
Person("영희"), // 영희의 나이는 null
Person("철수", age=29)
)
val oldest = persons.maxBy { it.age ?: 0 } // 람다식과 엘비스 연산자
println("가장 연장자: $oldest") // [결과] 가장 연장자: Person(name=철수, age=29)
}
-
대상 플랫폼: 서버, 안드로이드 등 자바가 실행되는 모든 곳
- 서버, 안드로이드 외 다른 환경에서도 잘 작동함
- 자바스크립트로도 코틀린을 컴파일할 수 있음 -> 브라우저나 노드에서 실행 가능
-
정적 타입 지정 언어
- 자바와 같이 정적 타입 지정 언어
- 자바와 달리 개발자가 모든 변수의 타임을 직접 명시할 필요가 없음(타입추론: 컴파일러가 문맥을 고려해 변 수 타입을 결정하는 기능)
var x = 1 // x를 정수(Int) 값으로 초기화
- 정적 타입 지정의 장점
- 성능: 실행 시점에 어떤 메소드를 호출할지 알아내는 과정이 필요 없으므로 메소드 호출이 더 빠름 - 신뢰성: 컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 프로그램이 오류로 중단될 가능성이 더 적어짐 - 유지보수성: 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때도 더 쉬움 - 도구 지원: 정적 타입 지정을 활용하면 더 안전하게 리팩토링할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공할 수 있으며, IDE의 다른 지원 기능도 더 잘 만들 수 있음
- 널이될 수 있는 타입을 지원하여 프로그램의 신뢰성을 높일 수 있음
-
함수형 프로그래밍과 객체지향 프로그래밍
- 일급 시민인 함수: 함수를 일반 값처럼 다룰 수 있음
- 함수를 변수에 저장 가능 - 함수를 다른 인자로 다른 함수에 전달 가능 - 함수에서 새로운 함수를 만들어서 반환 가능
- 불변성: 함수형 프로그래밍에서는 일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그램을 작성함
- 부수 효과 없음: 함수형 프로그래밍에서는 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수를 사용함
- 함수형 스타일 작성의 장점
- 간결성: 함수를 값처럼 활용할 수 있으면 더 강력한 추상화를 할 수 있고 강력한 추상화를 사용해 코드 중복을 막을 수 있음 - 다중 스레드 사용의 안전성: 불변 데이터 구조를 사용하고 순수 함수를 그 데이터 구조에 적용한다면 다중 스레스 환경에서 같은 데이터를 여러 스레드가 변경할 수 없기 때문에 복잡한 동기화를 적용할 필요가 없음 - 테스트의 용이성: 부수 효과가 있는 함수는 그 함수를 실행할 때 전체 환경을 구성하는 준비 코드가 따로 필요하지만, 순수 함수는 독립적으로 테스트 가능
- 일급 시민인 함수: 함수를 일반 값처럼 다룰 수 있음
-
무료 오픈소스
- 코틀린 언어와 컴파일러, 라이브러리 및 코틀린과 관련된 모든 도구는 모두 오픈소스
- 코틀린 서버 프로그래밍
- 코틀린 안드로이드 프로그래밍
- 실용성
- 다른 프로그래밍 언어가 채택한 이미 성공적으로 검증된 해법과 기능에 의존함. 이로 인해 언어의 복잡도가 줄어들고 이미 알고 있는 개념을 통해 코틀린을 더 쉽게 학습 가능
- 도구를 강조. 항상 도구의 활용을 염두에 두고 설계됨
- 간결성
- 코드가 간단해서 내용 파악이 쉬움
- 람다를 지원하기 때문에 작은 코드 블록을 라이브러리 함수에 쉽게 전달 가능
- 안전성
- JVM에서 실행하기 때문에 메모리 안전성 보장, 버퍼 오버플로 방지, 동적 할당 메모리를 오사용하여 발생할 수 있는 다양한 문제 예방
- 컴파일러가 타입을 자동으로 추론해주기 때문에 자바보다 더 적은 비용으로 타입 안전성 사용
- 컴파일 시점 오류를 더 많이 방지함
- 타입검사와 캐스트가 한 연산자에 의해 이뤄짐. 타입 검사를 생략할 이유가 없고, 검사를 생략하지 않으면 검사를 생략해서 생기는 오규가 발생할 일도 없음
val s: String? = null // 널이 될 수 있음 val s2: String = "" // 널이 될 수 없음 if(value is String) // 타입을 검사 println(value.toUpperCase()) // 해당 타입의 메소드를 사용
- 상호운용성
- 기존 자바 라이브러리 사용 가능
- 자바에서 코틀린 코드 소스 파일을 자유롭게 내비게이션 할 수 있음
- 코틀린의 클래스나 메소드를 일반적인 자바 클래스나 메소드와 똑같이 사용 가능
- 기존 자바 라이브러리를 가능하면 최대한 활용함
- 코틀린 코드 컴파일
- 코틀린 컴파일러는 코틀린 소스코드를 분석해서 .class파일 생성 - 생성된 .class 파일은 개발 중인 애플리케이션의 유형에 맞는 표준 패키징 과정을 거쳐 실행될 수 있음 - 가장 간단한 방식은 커맨드라인에서 kotlinc 명령을 통해 코틀린 코드를 컴파일한 다음 java 명령으로 그 코드를 실행하는 것 kotlinc <소스파일 또는 디렉터리> -include-runtime -d <jar 이름> Java 一jar <jar 이름>
- 대화형 셀
- 이클립스 플러그인
- 온라인 놀이터
- 자바-코틀린 변환기