본문 바로가기

Programming/Kotlin

[Kotlin] 코틀린을 이용한 안드로이드 프로그래밍 실습 01-1

# 준비

- 강의자료 : https://github.com/zoops/2018-kotlin-lecture

- Kotlin 공식 홈페이지 : http://kotlinlang.org/

- HAXM : 안드로이드 에뮬레이터 가속(속도 빨라짐)

- Kotlin 웹 IDE :  https://try.kotlinlang.org/


# IDE : Android Studio

- 2.x 까지는 별도로 Kotlin 플러그인 설치 필요

- 3.x 부터는 불필요(자동 설치)

- 최소 버전 Lollipop 부터 지원

# 개요

- Kotlin은 JVM 위에서 돌아감(바이트코드로 변환->자바코드로 변환) <-> JVM 위에서 돌릴 수 있는 모든 언어는 Kotlin으로 변경 가능!

  ex) Android(Java), Spring, sublet, java script

- 구글에서 Kotiln을 안드로이드 공식 언어로 채택함!


# Kotlin 소개

- 젯브레인의 오픈소스 그룹에서 개발

- 자바, 안드로이드 100% 호환

- 자바, 안드로이드, 브라우저, native app, 웹 백엔드 등 개발

- 함수형 언어, Lambdas, Extension, Null Safety 등 최신 언어의 트렌드 지원

  -> 사용자가 더 편하게 코드를 작성할 수 있도록 되어있음. (런타임에러 등 오류 발생 가능성 줄여줌)

- Java8 Nougat 버전부터 지원하는 반면 Kotlin은 Lollipop 버전부터 지원

- 단점 : 자바로 하면 되는데 왜 배워야하는지 의문이 들 수 있음(띠용?), 함수형 언어의 어려움. Java와 Kotlin 100% 호환되지만 일부 미묘하게 다를 수 있음.


# 여담

- open JDK 무료

- oracle JDK 유료화됨.(Java8 까지는 무료)


# 코틀린의 가장 큰 장점!

public class data {
private String str = "";
private int i = 0;

@Override
public String toString() {
return "data{" +
"str='" + str + '\'' +
", i=" + i +
'}';
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof data)) return false;
data data = (data) o;
return i == data.i &&
Objects.equals(str, data.str);
}

@Override
public int hashCode() {

return Objects.hash(str, i);
}

public String getStr() {
return str;
}

public void setStr(String str) {
this.str = str;
}

public int getI() {
return i;
}

public void setI(int i) {
this.i = i;
}
}
위의 코드가 아래와 같이 간소화된다.

data class D01(var s1: String? = null, var i1: Int = 0)


# 특징

1. 자바의 불편한 점을 개선하고, 간소화 하는 방향으로 발전.

  - Java와 100% 호환

  - 무의미한 반복적인 코드를 간소화하고, 최대한 의미있는 부분만 집중하도록 발전

  - 코드 작성시간과 읽는 시간을 줄여줌.

  - 세미콜론(;) 불필요

  - 정적 타입 언어지만 강력한 타입 추론 지원

정적 타입 언어 특징 

- 성능: 컴파일 타임에 이미 메서드 호출관계가 지정되어 런타임시 빠르다

- 신뢰성: 컴파일러가 어느정도 컴파일타임에서 많은 오류를 잡아낸다.

- 유지 보수성: 코트상에서 객체의 타입을 알수 있기 때문에 코드를 다루기 쉽다

- 도구지원: 안전한 리팩토링이 가능하며, 개발툴은 정확한 코드 완성 기능을 제공할 수 있다.


  - 강력한 nullability check 지원 : ?, ?., ?:, !!

  - 제어식 지원

  - Switch-case 보다 편리한 when

  - default parameter 지원

2. 객체지향형 프로그래밍 지원

  - Class / interface / abstract

  - Operator overloading

  - infix : a add b

  - Object

  - Companian

  - Nested / inner

  - Data

  - Enum

  - Sealed

3. 함수형 프로그래밍 지원

  - 하이오더펑션 (고차함수) : 함수를 파라미터(데이터)로 전달할 수 있음.

  - 람다

  - 클로저

  - It

  - SAM(Single Abstract Method)

  - Stream : Java8은 pararell stream 지원하지만 Kotiln은 아직.

  - Standard Scope function 

    - T.let / T.run / run / with / T.apply /  T.also

=> CPU 처리속도는 더이상 빨라지지 않음(정체). 병렬처리가 부상중! 객체지향 + 함수형 프로그래밍이 대두될 것.

4. 메타프로그래밍 지원

- 제너릭 지원 (객체 / 함수)

- 불변형 / 공변형 / 반공변형



# 출처 : 모베란 백지훈 대표이사님