2020. 12. 10. 10:39ㆍprogramming/kotlin
코틀린은 IDE회사로 유명한 jetBrains에서 2011년에 공개한 프로그래밍 언어입니다. Kotlin은 JetBrains의 개발자들이 있는 핀란드 발트해의 작은 섬의 이름을 땃다고 합니다.
JVM 기반 언어이며 자바와 100% 호환되어 자바로 작성된 코드를 코틀린 코드로 대체할 수도 있습니다. JVM 바이트코드가 기본이지만, Kotlin/Native 컴파일러를 사용하여 기계어 최종컴파일이 가능합니다.
2017년에는 구글에서 안드로이드 공식언어로 채택하였습니다.
코틀린 공식 사이트 : https://kotlinlang.org/
안드로이드 코틀린 개발자 공식 사이트 : https://developer.android.com/kotlin/?hl=k
안드로이드 스튜디오 다운로드 : https://developer.android.com/studio/?hl=ko
코틀린 프로그래밍 웹 IDE 버전 : https://try.kotlinlang.org
특징
간결한 문법
- 문장끝에 세미콜론을 넣지 않아도 됩니다.
- new 키워드를 쓰지 않고 객체를 생성합니다.
- 타입추론이 가능하기 때문에 아래와 같이 사용이 가능합니다.\
var a = 1
var b:Int = 2
널 안정성
- 객체 타입의 변수에서 널 값의 허용 여부를 컴파일 단계에서 검사합니다. 런타임시에 발생하는 오류를 줄일 수 있는 큰 장점이 있습니다.
Data classes
- 코틀린을 사용하면 get/set을 별도로 생성해줄 필요가 없습니다. var과 val의 사용에 따라 get/set 사용법이 다릅니다. var의 경우 Read/Write가 모두 가능하고, val 을 사용하면 Read-only만 가능합니다.
- (값 val=value, 변수 var=variable)
Kotlin이 아닌 기존 안드로이드 자바에선 VO 클래스에선 get/set ..등등 별도로 생성해야 하는 lombok 라이브러리를 사용해야 했는데 Kotlin에선 lombok을 사용할 필요가 없어집니다.
Java – User VO
class User() {
String name = "";
String id = "";
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return this.id;
}
}
Kotlin – User Vo
Class User() {
var name: String = ""
var id: String = ""
}
코드가 간결해지며 유지보수도 용이해집니다.
4. 람다표현식 지원
- 함수를 선언하지 않고 곧바로 식으로 전달해서 표현할 수 있습니다.
- 파라미터는 -> 왼쪽에 선언. 파라미터가 있다면 식으로 전달
- -> 의 오른쪽에서는 function 작동
- 식은 중괄호 { }로 시작하고 끝납니다
fun printText(text: String) {
println("print : $text")
}
printText("HI")
위와 같은 식을 아래처럼 표현이 가능합니다
val printText = {text: String -> printLn(print : $text")}
printText("HI")
스트림 API 지원
- Stream은 자바8부터 추가된 기능으로 컬렉션, 배열 등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를 적용하며 반복적으로 처리할 수 있도록 해주는 기능입니다.
- Stream은 주로 Collection, Arrays에서 사용합니다.
<기존방식>
List<String> users = Arrays.asList("player1", "player2", "player3", player4");
int rank = 0;
for (String user : users) {
if (user.contains("2")) {
count++;
}
}
System.out.println("rank : " + rank);
<Stream 방식>
List<String> users = Arrays.asList("player1", "player2", "player3", player4");
rank = 0;
rank = users.stream().filter(x -> x.contains("2")).count();
System.out.println("rank : " + rank);
배열안 해당 값을 가진 갯수를 출력하려 할때 기존 방식으로는 반복문과 분기문을 사용해서 했지만 스트림을 이용하면 보다 간결하게 사용 가능합니다.
6. 완벽한 자바 호환성
- Kotlin은 개발 코드가 Java 클래스로 빌드되어 JVM에서 동작하기 때문에 호환이 가능합니다.
- 안드로이드 스튜디오에서 Kotlin 파일에 Java 소스를 붙여넣기 하면 자동으로 Kotlin 언어로 변경됩니다. 처음에 이런식으로 Java 문법이 어떻게 Kotlin으로 바뀌는지 보다 쉽게 접근할 수 있습니다.
7. 함수형 프로그래밍
- 절차지향 프로그래밍 : 로직 위주로 동작하는 프로그래밍 방식 ex) C
- 객체지향 프로그래밍 : 클래스가 프로그램의 최우선이 되는 프로그래밍 방식 ex) Java, C++
- 함수형 프로그래밍 : 함수가 일급 객체로써의 의미를 가짐 ex) Kotlin, javascript
일급객체?? 최상위 레벨이라고 생각하면 됩니다. 자바에서 클래스가 변수, 함수를 클래스 안에 둘 수 있는데 그 클래스 마져 안에 가질 수 있다는 겁니다.
fun Developer() {
var name = "cooingpop"
fun coding() {
println("coding by $name")
}
class Project {
fun develop() {
coding()
println("coding project")
}
}
Project().develop()
}
함수를 변수처럼 사용할 수도 있고, 참조할 수도 있습니다.
val test = fun Play() {
...
}