Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스
  • 백준
  • rsocket
  • kotlin
  • 파이썬
  • Android
  • 프리코스
  • webflux
  • Wil
  • til
  • 코틀린 인 액션
  • 안드로이드
  • 레포지토리
  • elasticsearch
  • enum
  • kibana
  • ec2
  • 다이나믹 프로그래밍
  • 코틀린
  • 우아한테크코스
  • 에라토스테네스의 체
  • Docker
  • java
  • 문자열
  • 코딩테스트
  • SQL
  • grafana
  • MariaDB
  • spring
  • 내림차순

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

Android/Kotlin

[Kotlin] Operator, conditions & loop

2022. 9. 6. 20:57

Operator - Safe calls

?. : safe call operator

- nullable 타입 변수 속성에 접근 가능

var userName: String? = null
if(userName.isEmpty() // Error : userName이 null이므로 isEmpty() 호출 불가능
{
	println("사용자 이름을 다시 입력해주세요.")
}
if(userName?.isEmpty() == true)
{
	println("사용자 이름을 다시 입력해주세요.")
}
if(userName?.isNullOrEmpty()) // 공백을 여러 번 입력하는 경우 처리가 되지 않음
	println("사용자 이름을 다시 입력해주세요.")
}
if(userName?.isNullOrBlank()) // 빈 문자열 입력 대응
{
	println("사용자 이름을 다시 입력해주세요.")
}

 

Conditions and loops - If expression

1) 선언 시 변수 값을 초기화 하지 않는 경우 : 이후 발생 가능한 모든 경우에 대해 초기화

var max: Int
if(a>b){
	max = a
}else{
	max = b
}

2) if 는 값을 반환하는 식
    block의 마지막 값을 반환해 변수에 할당

val max = if(a>b){
	print("Choose a")
    	a
}else {
	print("Choose b")
   	b
}

 

Operator - Elvis

- if 식 대신에 사용 가능

var userName = readLine() // nullable string 타입으로 반환
if(userName == null) // 값을 사용할 때 null 여부를 판단해야함
{
	userName = ""
}

Elvis 연산자 사용 시

입력 받은 값이 null 인 경우 -> 연산자 이후의 코드 실행

입력 받은 값이 null이 아닌 경우 -> 입력 받은 값 반환

var userName = readLine()?:""

 

Operator - not null assertion

- null이 가능한 경우가 존재 하더라도 컴파일 가능하도록 함

- Runtime에 NullPointerException 발생 가능

 

Conditions and loops - When expression

- if, else 와 서로 대체 가능

- when은 여러개의 branch로 조건식을 정의

var userName: String = readLine() ?: ""
if(userName.length < 4)
{
	println("사용자 이름은 4자 이상으로 만들어주세요")
}
else if(userName.length > 16)
{
	println("사용자 이름은 16자 이하로 만들어주세요")
}
else
{
	println("사용할 수 있는 이름입니다.")
}
var userName: String = readLine() ?: ""
when
{
	userName.length < 4 -> 
    	println("사용자 이름은 4자 이상으로 만들어주세요")
    }
    userName.length > 16 -> {
    	println("사용자 이름은 16자 이하로 만들어주세요")
    }
    else -> {
    	println("사용할 수 있는 이름입니다.")
    }
}

 

Operator - Type check & smart cast

- is / !is : type check operator

- 스마트 캐스트 : type 검사 이후에 해당 type으로 자동 변환

when(x) 
{
    is Int -> print(x+1)
    is String -> print(x.lenght+1)
    is IntArray -> print(x.sum())
}

 

Operator - Type cast

1. as : Unsafe cast operator

- int 타입을 string 타입으로 변경할 수 없어 오류 발생

val number = 1
val text: String = number as String // Error

2. as? : Safe cast operator

- int 타입을 string 타입으로 변경하는 것에 실패하여 text에는 null이 할당 됨

val number - 1
val text: Stirng? = number as? String

 

for loop

val names: Array<String> = arrayOf("Bob", "Jen", "Amy")
for(name in names)
{
	println("이름 : ${name}")
}
val nameSize = names.size
for(index in 0 until nameSize)
{
	println("이름 : ${names[index]}")
}
for(index in (nameSize-1) downTo 0 step 2)
{
	println("이름 : ${names[index]}")
}

 

loop - break

- break : 가장 가까운 loop 종료

- break@레이블 : 실행 지점을 @레이블 위치로 이동

val matrix = arrayOf(
    intArrayOf(1,2,3),
    intArrayOf(4,5,6)
)
loop@ for(row in matrix)
{
	for(col in row)
    {
    	if(col == 2) break@loop
        print("$col ")
    }
    println()
}

1) 첫 번째 for 문 진입 시 row는 첫 번째 행인 (1,2,3)

2) 두 번째 for 문 진입 시 col은 1 -> 2 (col == 2 이므로 break@loop 수행)

3) 출력 값은 1

두 개 for문 종료 시, 2개의 for문 종료 조건 판단 없이 break@레이블을 통해 종료 가능

 

loop - continue

- continue : 가장 가까운 loop 다음 step 진행

- continue@레이블 : 실행지점을 @레이블 위치로 이동

val matrix = arrayOf(
    intArrayOf(1,2,3),
    intArrayOf(4,5,6)
)
outer@ for(row in matrix)
{
	for(col in row)
    {
    	if(col == 2) continue@outer
        print("$col ")
    }
    println()
}

1) 첫 번째 for 문 진입 시 row는 첫 번째 행인 (1,2,3)

2) 두 번째 for 문 진입 시 col은 1 -> 2 (col == 2 이므로 continue@loop 수행)

3) 첫 번째 for 문 진입 시 row는 두 번째 행인 (4,5,6)

4) 두 번째 for 문 진입 시 col은 4 -> 5 -> 6

5) 출력 값은 1 4 5 6

728x90

'Android > Kotlin' 카테고리의 다른 글

[Kotlin] Package, 가시성 변경자(public,private,internal,protected)  (0) 2022.09.11
[Kotlin] 클래스 toString/equals/hashCode, data class  (0) 2022.09.10
[Kotlin] 함수, Superclass, Subclass  (0) 2022.09.10
[Kotlin] 클래스 상속, 추상화, 인터페이스  (0) 2022.09.09
[Kotlin] Variables & Types  (0) 2022.09.06
    'Android/Kotlin' 카테고리의 다른 글
    • [Kotlin] 클래스 toString/equals/hashCode, data class
    • [Kotlin] 함수, Superclass, Subclass
    • [Kotlin] 클래스 상속, 추상화, 인터페이스
    • [Kotlin] Variables & Types
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바