보초의 코딩일기장

코틀린을 이용한 안드로이드 프로그래밍 실습 -1 본문

Android/Kotlin

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

장보비 2018. 7. 2. 10:27

코틀린을 이용한 안드로이드 프로그래밍 실습 - 안드로이드 소개 개발환경 설정


코틀린으로 코드 작성시 MinSdk 21 , TargetSdk 26


online : https://try.kotlinlang.org/


2017 5 구글 I/O 행사에서 안드로이드의 공식 언어로 코틀린을 지정

 구글이 오라클의 소송에서 패소했기 때문에 라이센스를 지불해야

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

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

 안드로이드 코드 알파벳 순서대로 진행됨

안드로이드P 부터는 코틀린 코드에 대한 성능이 최적화

 함수형 언어는 객체, 절차지향언어보다 배우기 힘듦

 자바와 100%호환되지만 같이 사용할 미묘한 차이가 존재할 있음

Menu->Code->Convert Java file to Kotlin file 이용해 자동 변환 제공 (일차변환  수정 필요)

Tool->Kotlin->Show Kotlin Bytecode 코틀린의 바이트코드   있음 , 디컴파일해서 자바로 확인 가능함



Kotlin 특징1 - 편리함 / 간소화 -> 코드의 양이 줄어듦

생각할 시간이 줄어든다는 의미도 들어있음


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

*세미콜론( ; ) 불필요

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

제어식 지원

제어문을 식으로 사용할 있다.

정수형 i 선언하고 수를 넣어준 조건문을 사용한다면

코틀린은 선언과 동시에 조건문을 바로 사용할 있다.

여러가지 오퍼레이터를 지원한다

?, ?. , ?:, !!

C++보다 강력한 디폴트 파라메터를 지원한다.

f(int a, int b) 라는 함수가 가정되었을 ,

f(1,2) , f(1), f() 전부 가능하다.


Kotlin 특징2 - 객체지향, 함수형, 제너릭

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

함수형 프로그래밍 지원

고차함수를 지원함

메타프로그래밍 지원


Kotlin [ Hello World ]

 변수명 타입 순으로 입력


fun main(args: Array<String>) {

    println("Hello, world!")

}


  fun: 함수임을 나타내는 키워드


  main: 함수 이름 ( 여기서는 엔트리포인트가 되는 메인 함수

     class 필요 없음 –  레벨 함수 정의 가능.

  (args: Array<Sting>): 함수인자  "변수명타입" 

  println("Hello, world!"): System.out.println println으로 간단하게 사용

  표준 자바 라이브러리 함수를 간소화해주는 wrapper 제공

  ; (세미콜론불필요

 코틀린 파일이름과 클래스가 같지 않아도 되고 코틀린 파일 내부에 클래스가 존재하지 않아도 된다.



Kotlin - 변수

변수선언시 val( or var) 변수명 : 타입 =

val(value) 불변 변수 (get, set X) -> setter 없는 프로퍼티이지 상수는 아니다!

var(variable) 가변 변수 (get,set 존재)

타입 추론 지원 ( 타입 생략 가능

보통 NULL 사용하지 않기 때문에 값을 넣어주어야 한다.

ex: var str : String ->오류 : null 가질 없기 때문에

      var str : String ?  -> null 의미

var str : String = "s1"  var str = "s1"    같은 의미이다


 처음에 변수에 어떤 값을 넣을지 모를 우선 null 선언 후에

나중에 변수에 값을 넣어야 lateinit 사용한다.

""" 으로 멀티라인 스트링 표현 가능

문자열 템플릿으로 사용 가능

var s1="s1" 선언 되었을

println("s1=",s1) == println("s1=$s1") 같은 의미이다.

상수표현은 const 사용

val 선언한 변수의 초기값을 변경할 수는 없지만, 일반적인 상수변수와는 다르다.

최상위레벨로 선언할때만 const 사용 가능하다.



*?.

a?. length -> a가 null이 아니라면 length를 반환

a?.name?.length ->a가 null이 아니고 name도 null이 아니면 length를 반환, 그렇지 않으면 null을 반환

*!!

Non-null 타입으로 강제 캐스팅

*?:

엘비스 연산자라고 불림

코틀린은 3항연산자가 존재하지 않아 이 연산자를 이용해 3항연산을 수행한다.

*as?

ClassCastExecption이 발생해야 하는 상황에 에러 발생 없이 Null이 리턴된다.


Kotlin - 함수

fun 함수명 (매개변수명 : 타입) : 리턴타입 {}

*매개변수에는 var,val 선언 불가, 오직 변수명 타입 순으로 쓴다.

*Unit(void) 반환값 생략가능

*탑레벨 함수 선언 가능

*함수 내에 함수 선언 가능

대신 그 함수가 쓰이기 전에 함수가 선언되어야 한다.

*가변인수(변수가 몇개인지 모를 때) 사용 가능 : vararg

*재귀함수 : Tailrec

*확장함수가 가능하다.

class int. {    } 라는 클래스가 존재하고 int 안에 addex 라는 함수를 새로 만들고 싶다면

fun int.addex(){    }로 생성해주면 된다.


Buy me a coffeeBuy me a coffee
Comments