[TIL] #2 Kotlin Basic Syntax 1

Yeon·2023년 7월 18일
0
post-thumbnail

💡 Coding Convention

1) camelCase: 주로 변수, 메소드의 이름을 지정할 때 사용
2) snake_case: 주로 상수의 이름 지정할 때 사용
3) PascalCase: 주로 클래스의 이름을 지정할 때 사용

backgroundColor   // camelCase
background_color  // snake_case
BackgroundColor   // PascalCase



💡 Types

크기특징
Long64비트정수
Int32비트정수
Short16비트정수
Byte8비트정수
Double64비트실수(소수)
Float32비트실수(소수)
Char16비트하나의 문자
Boolean8비트논리(참 또는 거짓)
StringX문자열



💡 Variable & Value

var declaration

1. keyword

변수 선언시 해당 변수가 변경 가능한지 여부를 결정하는 것으로 해당값은 필수값

1) var

  • variable
  • 값의 재할당 가능 (mutable)
  • 읽기/쓰기가 가능한 일반 변수

2) val

  • value
  • 값의 재할당 불가능 (immutable)
    • 재할당 할 경우 에러 발생
  • 읽기만 가능한 final 변수

2. name

  • 해당 변수 이름을 통해 개발자는 변수에 접근할 수 있음

3. data type

  • Kotlin은 타입 추론을 언어 차원에서 지원해주고 있음
  • 초기화 값이 있고 충분히 추론할 수 있는 값에 대해서는 변수 타입은 선택 사항!

4. initial value

  • 변수는 선언과 동시에 초기화 할 수 있음
  • 해당 값을 통해 변수 타입 추론이 이루어질 수 있음

5. example

1) 변수 선언과 동시에 값 넣기

  • 입력되는 값으로 타입 추론
  • 값이 입력되는 순간 해당 값의 형태로 변수의 타입이 결정
var name = 'ars'    // 변수명 name에 문자열 "ars" 입력

2) 값으로 초기화하지 않고 선언만 하고 사용

var age: Int    // 변수명 age를 Int 타입으로 선언
age = 27        // 숫자 '27'을 입력
  • 위 두가지 예시로 최초 선언 시에 타입이 결정된다는 것을 예상할 수 있음
  • 변수는 한번 타입을 결정하면 동일한 타입의 값만 담을 수 있음
  • 만약 아래와 같이 Int 타입의 변수에 문자열 "스물일곱"를 입력하면 컴파일 에러가 발생함
var age: Int
age = 27

age = '스물다섯'    // (x) 선언했던 값의 타입과 다르기 때문에 입력X
age = 25           // (o) 선언했던 타입과 같은 숫자(Int)는 입력O



💡 Operators

설명
+, -, *, /, %산술 연산자
=대입 연산자, 매개변수의 기본값 지정
+=, -=, *=, /=, %=복합 대입 연산자
++, --증감 연산자
<, >, <=, >=비교 연산자
==, !=동등 연산자
===, !==동일 연산자
&&, ||, !논리 연산자
in, !in, a..b, a[i], a[i]=b코틀린에 있는 특이한 연산자
  • 동등성 (equality): 두 객체의 값이 같은지 여부 = 값 비교
  • 동일성 (Identity): 두 객체가 같은 객체인지 여부 = 객체 비교



💡 Conditional Expression

1. if-else

if-else

  • Java와 다르게 Kotlin에서는 if, else도 표현식이며, if else는 항상 반환값이 있음
  • {} 블럭으로 있을 경우에는 마지막줄의 값을 반환
  • if, else를 표현식으로 사용할 경우, if가 있으면 항상 else도 있어야 함
val x = 2
val y = 7

var max: Int

if (x > y) {
    max = x
} else {
    max = y
}


// 표현식으로서의 사용
val max = if (x > y) x else y

2. when

when

  • Java의 switch-case와 대응되지만 Kotlin에서는 표현식으로 사용될 수 있어 값을 할당할 수 있음
  • Kotlin의 is는 Java의 instanceOf와 비슷함
    처리해야 되는 양이 많을 때는 {} 블럭으로 묶는데, 그걸 표현식으로 사용할 때에는 제일 마지막 라인의 값을 반환
  • when을 표현식으로 사용할 경우에는 항상 else를 사용 (enum 제외, 표현식이란 무언가 값에 할당한다는 것을 의미)
    when으로 type을 분기하면 별도로 casting을 하지 않아도 됨
val x = 1

when {
    x == 1 -> print('x == 1')
    x == 2 -> print('x == 2')
    else -> {
        print('x is neither 1 nor 2')
    }
}

// 위에 조건을 줄여서 표기 가능
// 1.
when(x) {
    1 -> print('x == 1')
    2 -> print('x == 2')
    else -> {
        print('x is neither 1 nor 2')
    }
}

// 2.
when(x) {
    0, 1 -> print('x == 0 or x == 1')
    else -> print('otherwise')
}

// 3.
val s = '1'
val x = 1

when(x) {
    parseInt(s) -> print('s encodes x')
    else -> print('s does not encode x')
}

fun parseInt(value: String): Int = 1


// 4.
val x = 129
val validNumbers = 100..120

//when의 조건에 표현식이 들어갈 수 있음
when(x) {
    in 1..10 -> println('x is in the range')
    in validNumbers -> println('x is valid')
    !in 10..20 -> println('x is outSide the range')
    else -> println('none of the above')
}

3. if vs when

  • if 범위가 넓고 값을 특정 할 수 없을 경우 사용
  • when 범위가 제한되고 값을 특정할 수 있는 경우 사용
when (week) {
    mon -> red
    tue -> orange
    wed -> yellow
    thu -> green
    fri -> blue
    sat -> navy
    else -> purple
}

위 코드를 if문으로 작성한다면 아래와 같음

if (week == mon) {
    red
} else if (week == tue) {
    orange
} else if (week == tue) {
    yellow
} else if (week == tue) {
    green
} else if (week == tue) {
    blue
} else if (week == tue) {
    navy
} else {
    purple
}

📌 이처럼 사용하려는 값을 특정할 수 있고 값의 범위가 넓지 않다면?

  • when문을 사용하는 것이 더 좋음
  • if문은 가독성과 효율성이 떨어짐

4. try - catch

  • Java의 try-catch와 비슷하지만 표현식으로 사용할 수 있어서 변수 등에 값을 할당할 수 있음
  • 정상적인 케이스에는 try 값이 exception이 발생하면 catch 값이 할당됨
  • try, catch{}의 마지막 줄의 값을 반환
  • Java와 마찬가지로 finally도 제공하지만 선택적임
// 표현식으로서의 사용
val value = "test"

val parsedInt: Int? = try {
    value.toInt()
} catch (e: NumberFormatException) {
    -1
}
println(parsedInt)    // -1



💡 Loops

1. for

  • Java가 인덱스 기반 for문과 for-each문을 지원하는 반면 Kotlin은 for-each 형태만 지원하며, 반자를 통해 접근하는 인자의 타입을 생략할 수 있음
val names: List<String> = ...

// 변수 name의 타입은 List names를 통해 String으로 추론하므로
// 타입을 굳이 명시하지 않아도 됨

for에서의 인덱스 접근

  • for문 내에서 현재 항목의 인덱스가 필요할 경우, Collection.indicies Property를 사용하면 Collection의 인덱스를 순환하여 인덱스 인자로 배열 내 항목에 접근할 수 있음
val names: List<String> = ...

for (i in names.indicies) {
    // 인덱스 인자로 배열 내 항목 접근
    Log.e("Name", "name=${names[i]}")
}

2. while

  • Kotlin의 while문과 do while문의 기능 및 문법은 Kotlin 문법의 일반적인 특징을 제외하면 Java와 완전히 동일함
var x: Int = 0
var y: Int = 7

while (x < y) {
    Log.d("Number", "x=$x y=$y");
    x += 2
    y ++
}


// do while
var x: Int = 0
var y: Int = 7

do {
    Log.d("Number", "x=$x y=$y")
    x += 2
    y ++
} while (x < y)



💡 Range

1. a..b

  • a부터 b까지
  • 시작과 끝을 포함하는 범위
val myRange : IntRange = 0..10

for (i in myRange) {
    // Do smething
}

// for문 안에서 바로 범위 지정
for (i in 0..10) {
    // Do somthing
}

2. until

  • 가장 마지막 값을 포함하지 않는 범위
val items: List<String> = ...

val myRange: IntRange = 0..4      // 0, 1, 2, 3, 4
val myRange: IntRange = 0 util 4  // 0, 1, 2, 3

3. downTo( )

  • 역순으로 수행
for (i in 7 downTo 3) print(i)  // prints "76543"

4. step( )

  • interval 설정
for (i in 3..8 step 2) print(i)        // prints "357"

for (i in 8 downTo 1 step 2) print(i)  // prints "8642"



[참고 사이트]
'Create and use variables in Kotlin', Android Studio
'Kotlin 4.연산자', IfUwanna IT
'Expression', Kotlin

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

정말 유익한 글이었습니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

아주 유익한 내용이네요!

답글 달기