Kotlin을 알아보자

kotlin이란?

2011년 IntlliJ IDEA 개발사인 JetBrains에서 공개한 프로그래밍 언어.
코틀린 공식 문서에서는 아래와 같이 코틀린을 소개하고 있다!

A modern programming language
that makes developers happier.

(개발자를 행복하게 하는 현대적인 프로그래밍 언어 .....땡큐파파고)

일반적인 코드 오류를 줄이고 기존 앱에 쉽게 통합되는, 간결하면서도 안전하고 표현력이 높은 프로그래밍 언어로 2017년 구글 안드로이드의 공식 언어로 채택되었다.
(안드로이드 뿐 아니라 다양한 서버 프레임워크(Spring, Vert.x, Ktor..)와 JavaScript등의 개발에서도 사용 가능하다)

Kotlin 훑어보기

* 변수 선언

  • val : 값이 변경 되지 않는 변수 선언 시 사용
  • var : 값이 변경되는 변수는 선언 시 사용
  • 타입 추론 : 변수 타입을 명시 하지 않아도 할당된 갑을 통해 타입 추론이 가능하다.
  • lateinit : 원하는 시점에 초기화
  • lazy : 변수를 미리 선언하고 사용 시점에 값을 할당
val name: String = "호랑이"    // 값이 변경 되지 않는 변수는 val
var numberA: Int = 10        // 값이 변경 되는 변수는 var
var numberB = 1              // 타입 추론

lateinit var lateinitNumber: Int
//추후 초기화
lateinitNumber = 10

val lazyString: String by lazy {
	"호랑이"
}
//사용 시에 값이 할당됨
lazyString.contains("호랑")
  • java👇
final String name = "임수정";
int numberA = 10;
int numberB = 1;

* Type

kotlin 기본 타입은 아래와 같다.

  • 정수형 : Byte, Short, Int, Long
  • 실수형 : Float, Double,
  • 그외 : Char, String, Boolean

* Null Safety

kotlin 변수는 기본적으로 null 값을 가질 수 없으며, null 값을 포함하는 변수는 nullable 로 타입 뒤에 ? 를 붙여 지정한다.

var nameA: String = null     // 잘못된 코드!!!
var nameB: String? = null    // 타입의 접미사로 ?를 붙이면 nullable 완성~

//null 체크하기
nameB.contains("가")			// 잘못된 코드!!!
nameB?.contains("가")		// nameB가 null일 경우 해당 코드는 실행되지 않음
  • java👇
String nameA = null;			// 기본적으로 null 가능

nameA.contains("가");			// NullPointException 에러가 발생 할 수 있음

//null 체크하기
if(nameA != null) {
	nameA.contains("가");
}

* 조건부

if-else 사용법은 java와 유사하지만 java와 다르게 아래와 같이(Expression. 표현식) 사용 가능하다.

val answer = if(numberA < 5) {
	"numberA는 5보다 작다."
}else if( numberA == 5 ) {
	"numberA는 5이다."
}else {
	"numberA는 5보다 크다."
}

switch문과 비슷한 when이 존재한다.

//Expression
val answer = when() {
    numberA < 5 -> "numberA는 5보다 작다."
    numberA == 5 -> "numberA는 5이다."
    else -> "numberA는 5보다 크다."
}

when(numberA) {
    in 0..5 -> "numberA는 0~5이다"
    else -> "numberA는 5보다 크다."
}
  • java👇
String answer = "";

if(numberA < 5) {
	answer = "numberA는 5보다 작다.";
}else if( numberA == 5 ) {
	answer = "numberA는 5이다.";
}else {
	answer = "numberA는 5보다 크다.";
}

switch(numberA) {
	case 0:
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		answer = "numberA는 0~5이다";
        break;
	default:
		answer = "numberA는 5보다 크다";
		break;
}

* For문

java와 형태가 조금 다르다.

//1 ~ 5 까지
for (i in 1..5) {
    print("$i ")
}
//1 2 3 4 5 

//6 ~ 0 까지 +=2
for (i in 6 downTo 0 step 2) {
    print("$i ")
}
//6 4 2 0

//1 ~ 5 까지 +=3
for (i in 1..5 step 3) {
    print("$i ")
}
//1 4
  • java👇
for (int i = 1; i <= 5; i++) {
    System.out.print(i + " ");
}

for (int i = 6; i >= 0; i-=2) {
    System.out.print(i + " ");
}

for (int i = 1; i <= 5; i+=3) {
    System.out.print(i + " ");
}

* 함수

kotlin에서는 함수를 다음과 같이 작성한다.

//인수에 기본 값 지정이 가능하다.
//generateAnswer(6) or generateAnswer() 모두 호출 가능!
fun generateAnswer(number: Int = 1): String {
    val answer = when {
        number < 5 -> {
            "number는 5보다 작다."
        }
        number == 5 -> {
            "number는 5이다."
        }
        else -> {
            "number는 5보다 크다."
        }
    }
    
    return answer
}

//단순화 1
fun generateAnswer(number: Int = 1): String {
    return when {
        number < 5 -> {
            "number는 5보다 작다."
        }
        number == 5 -> {
            "number는 5이다."
        }
        else -> {
            "number는 5보다 크다."
        }
    }
}

//단순화 2
fun generateAnswer(number: Int = 1): String = when {
    number < 5 -> {
        "number는 5보다 작다."
    }
    number == 5 -> {
        "number는 5이다."
    }
    else -> {
        "number는 5보다 크다."
    }
}

* 익명함수

  • 말 그대로 이름이 없는 함수!
//stringLengthFunc에 할당 되는 값이 익명함수. String - 매개변수, Int - 반환값
val stringLengthFunc: (String) -> Int = { input ->
    input.length
}

val stringLength: Int = stringLengthFunc("Android")
//stringLength 값은 7

* 고차함수

함수를 인자로 사용 할 수 있는데, 이렇게 다른 함수를 인자로 사용하는 함수를 고차 함수라고 한다. 콜백 인터페이스처럼 사용하면 아주 유용하다!

//사실 아주 좋은 예시는 아님😅
fun sum(a: Int, b: Int, sumCallback: (Int) -> Unit ) {
    sumCallback(a+b)
}

//아래와 같이 사용
sum(1, 2, { sum ->
	//action
})

🤓 (갑자기?) 다음 시간에 계속...



** 참고 : Kotlin 공식 문서, Google Developer - Kotlin, 패스트 캠퍼스 강의

좋은 웹페이지 즐겨찾기