Kotlin 기초 1-3

Lee Jung-hwan·2023년 5월 15일
0

Kotlin

목록 보기
3/3
post-thumbnail

주의! 이글은 개인 공부 목적으로 작성된 포스팅입니다.
잘못된 내용이 있을 수 있음을 주의해주세요.

오늘은 Kotlin 기초 3번째 시간이다.
오늘까지 기초 내용을 다뤄보고 이후에 함수, it, data class와 같은
Kotlin의 핵심적인 내용을 다뤄 볼 예정이다.


🧐 when?

우리는 지금까지 if else와 같이 특정 조건에 해당하면 해당 코드를 작동하게 분기를 제어했다.

하지만 아래 코드처럼 if else 문이 많아지면 코드의 가독성이 많이 떨어진다.

	if(조건1){
    
    }else if(조건2){
    
    }else if(조건3){
    
    }else if(조건4){
    
    }else{
    
    }
    .
    .
    .
    

그럼 위와 같은 코드를 좀 더 깔끔하게 작성할 방법은 없을까?
복잡한 조건이 아닌 단순 조건이 "A"일 때와 같이 단순한 경우에는
아래 코드를 쓰는 게 좋다.

var num = 1


when(num){
	1 -> {println("1입니다.")}
    2 -> {println("2입니다.")}
    else -> {println("조건에 해당하지 않는 수입니다.")}
}

위와 같이 간단하게 if else문이 아닌 when으로 간단하게 분기 제어를 할 수 있다.


🗄️ Array?

우리는 지금까지 Kotlin의 기본적인 분기 제어 및 변수의 선언 및 초기화를 배웠다.
그럼 이제 프로그래밍의 핵심인 배열에 대해 배워보자.

배열은 뭘까?
배열은 데이터를 담아놓는 상자들의 집합이다.

위 사진은 NumberList라는 변수에 [1,2,3,4,5]가 저장되있는 상태이다.
위 사진을 코드로 구현하려면 어떻게 해야 할까?

var NumberList : Array<Int> = arrayOf(1,2,3,4,5)

위 코드를 입력하면 사진과 같은 배열이 생성된다.
하지만 우리는 배열에 미리 수를 받아 초기화하는 것보다, 상황에 맞게 데이터를
추가하는 일이 더 많다.

아래와 같이 진행해보자.

var NumberList2 = Array<Int>(size){0}

위 코드에서 Array(size)에 size 부분은 초기화를 위한 Int 형 값을 넣으면 된다.
또한, 괄호 안에 0은 "해당 크기만큼의 공간의 값을 0으로 초기화한다."라는 뜻이다.


✍️ 사용자의 입력을 받아보자!

우리는 지금까지 변수의 선언, 초기화, 간단한 배열의 선언 등을 배워봤다.
그럼 사용자의 입력을 받아서 변수를 초기화하려면 어떻게 해야 할까?

그럴 때 사용되는게 readln()이다. Kotlin은 Java의 Scanner를 사용할 수 있지만,
더욱 편하게 readln() 한 줄로 사용자의 입력을 받을 수 있다.

  var input = readln()
  println(input)

해당 코드를 작동시키면 사용자의 입력이 끝날 때까지 프로그램이 종료되지 않고 대기한다.
간단하게 A를 입력해보자.

A가 출력되는걸 볼 수 있을 거다.
그럼 사용자의 입력을 받아 배열에 값을 넣으려면 어떻게 해야 할까?

간단하게 5번의 입력을 받아 배열에 넣어보자.

  var list = Array<Int>(5)
  
  for(i in 0 until 5){
  	list[i] = readln() // 사용자의 입력을 받아 i 번째 배열에 값 삽입.
  }

위 코드를 분석해보자.
String 배열을 5개 담을 수 있는 배열을 생성하고, 사용자의 입력을 i 번째 배열에 값을
삽입하는 코드이다.

  	var list = Array<Int>(5)
  
	for(i in 0 until 5){
  		list[i] = readln() // 사용자의 입력을 받아 i 번째 배열에 값 삽입.
  	}
  
  	println(list[1])
  
> input : A,B,C,D,E
> output : B
  

우리는 지금까지 사용자의 입력을 받아 배열에 값을 삽입하고 출력하는 과정까지 해봤다.
Array이외에도 ArrayList, LinkedList등 여러 배열이 있지만,

오늘은 가장 기본적인 Array만 다뤄봤다. 배열에 대한 상세한 내용은 따로 글을 작성해보겠다.

Tip : 배열은 0번부터 시작합니다! 만약 배열의 크기가 5라면 5를 제외한 [0,1,2,3,4] 5칸의 공간이 생깁니다!

Tip : split()함수를 사용하면 띄어쓰기 입력에 대해 한 번에 받아올 수 있습니다.
ex. readln().split(" ") -> String 문자열의 띄어쓰기를 기준으로 나눈 후 문자열 배열 리턴


⭐️ 형 변환?

readln()을 사용해 사용자의 입력을 받아보면 String 형태로 받아지는 걸 알 수 있을 거다.
만약, 사용자가 Int 형 값을 입력했을 때 String이 아닌 Int 형으로 받으려면 어떻게 해야 할까?

그때 필요한 내용이 바로 형 변환이다.

형 변환?
1. Int -> String
2. char -> String
3. char -> Int
4. double -> Int

위와 같이 기존 자료형에서 다른 자료형으로 데이터를 변환시키는 과정을 형 변환이라 한다.

간단한 예로, String 자료형을 Int 형으로 바꿔보자.

  var num = readln()
  
  println("${num.toInt()+1}")
  
  > input  : 1
  > output : 2

위와 같이 변수.toInt()를 사용하면 간단하게 Int 형 자료로 바꿀 수 있다.
사실, readln().toInt()를 해도 된다.

🛠️ 만약, toInt()를 지우고 코드를 실행하면 어떻게 될까?

  var num = readln()
  
  println("${num+1}")
  
  > input  : 1
  > output : 11

위 코드는 String + String이 된다. 즉 문자열과 문자열이 합쳐지는 덧셈연산이 발생한다.
하지만, 아래와 같은 내용은 주의해서 형 변환을 시도해야 한다.

var num = '1'

println("${num.toInt()+1}")

> output : 50

우린 분명 1을 .toInt()를 사용해 Int 형으로 바꿨다. 하지만 50이 나왔다.
왜 1+1이 아닌 이상한 값이 나왔을까?

정답은 num 변수의 형태가 Char이기 때문이다.
Char변수에 .toInt()를 사용하면 Char의 아스키 코드표상의 10진수가 출력된다.

그래서 IDE를 사용해 Char 변수에 바로 .toInt()를 하면 밑줄이 쫙쫙 그셔 지는걸 확인할 수 있을 거다.

🔍 어떻게 해결하지?

그럼 우리는 Char로 입력된 숫자는 변환할 수 없는 것인가?
그건 아니다. 문자열로 한번 변환해주고 Int 형으로 한 번 더 변환해주면 된다.

var num = '1'
println("${num.toString().toInt() + 1}")

> output : 2

🧨 double, float 자료형을 Int로 바꿀 때도 조심해야 한다.

Kotlin에서 소수점 자리 자료형을 Int로 바꾸면 소수점은 자동으로 빠진다.
즉, 1.234를 Int로 바꾸면 1로 저장된다.

  var num = 1.234f
  
  println(num.toInt())
  
  > output : 1

위처럼 우리는 형 변환을 했을 때 자료가 빠지거나 의도치 않게 작용할 수 있다는 점을 알고 코딩해야 한다.

또한, 위 코드를 통해 .to자료형()을 사용하면 간편하게 형 변환을 할 수 있다는 점도 알 수 있다.


🌟 오늘은 여기까지!

오늘은 진짜 정신없이 달려왔다.

when을 사용해 더욱 깔끔한 분기 처리 및 배열의 선언, 사용자의 입력 받기, 형 변환 등
크게 4가지의 기능을 배워봤다.

백준의 간단한 구현 문제를 풀면 지금까지 배운 내용을 복습할 수 있을 것이다.
아래 GitHub에 여러 Kotlin 관련 실습 코드를 확인할 수 있으니 확인해보는 것도 좋은 방법이다.

GitHub : https://github.com/LeeJungHwan-Dev/2022_Kotlin_Study

소중한 시간 사용해 글 읽어주셔 감사합니다.

profile
안녕하세요😁 안드로이드 개발자 이정환 입니다~⭐️

0개의 댓글