본문 바로가기
🍃 Language/Kotiln

[Kotlin] 코틀린 기본문법1 (변수선언/함수선언/자료형/반복문/조건문)

by 카프리썬_ 2022. 1. 29.
728x90
728x90

사실 아직 코틀린를 도입하는 추세이다보니까 명확한 코틀린 코딩컨벤션이 아직 없는것 같다.

그래서 이제 내가 코틀린에 익숙해질겸 이걸로 나의 기본코딩스타일을 잡아봐야겠다.

우선 간단한 기본문법부터 살펴보겠다.

 

반응형

1. 변수선언

기본적으로 코틀린은 타입추론을 지원하기 때문에 직접 변수타입을 지정하지 않아도 된다. 

- val : 변할수 없는 상수, (java의 final, C의 const 개념),초기화 이후에 값을 변경할 수 없다. 

- var : 일반적인 변수 

val A:Int = 10 
A=10 //val타입이기 때문에 변수값을 바꿀수 없다.

var x =10 
x=100 //var타입이기 때문에 변수값을 바꿀수 있다. 

var y: Int = 10
y="age" //직접 타입을 지정한 변수에는 다른타입으로 재할당할수 없다.

타입추론을 지원하기 때문에 자동으로 타입이 지정되지만

변수이름 옆에 : 을 통해 직접 변수타입을 지정해줄수도 있다. 

하지만 직접 지정한 변수에 다른 타입을 재할당할 경우 컴파일에러가 발생한다. 

 

아 참고로 변수 선언할때 ; 없어도 된다! 

 

null값 처리

기본적으로 코틀린은 널값을 가질수 없도록 설정되어 있다.

그래서 널값을 이용하려면 추가적인 작업이 필요하다. 널이 가능한 변수라고 다로 선언해줘야한다. 

var x: Int = 10
x = null //널 불가 변수에 널 넣어서 오류

var y: Int? = 10
x = null //널 가능 변수에 널 넣어서 정상

?. 연산자를 사용해서 널이 아닐때만 함수가 실행되고, 널이 되면 널을 반환하도록 한다. 

즉 자바에서  if(str != null) return str.toUpperCase() else return null 을 한줄로 표현할 수 있는 것이다. 

val str = "abc"

println(str?.toUpperCase()) //str이 null이 아니면 str.toUpperCase(), null이면 null반환

!! 연산자를 사용해서 강제로 null 값이 들어가지 않을것이라는 선언도 가능하다.

항상 이렇게 선언된 변수는 not null로 인식되는데, 이때 Null이 되면 널포인트 에러가 발생한다. 

val s: String? = null
val x: String = s!!

 

2. 함수선언 

코틀린에서는 함수를 선언하는 구조가 조금 다르다(근데 이건 파이썬이랑 비슷한듯?)

fun 함수명 (변수명: 변수타입): 리턴 타입 {return 값}

//일반적인 구조
public fun add(x: Int. y: Int): Int{
	return x + y
}

//한줄로 표현 (리턴타입명시)
fun add(x : Int, y: Int):Int = x + y

//한줄로 표현 (리턴타입생략)
fun add(x : Int, y: Int) = x + y

 

728x90

3. 기본 자료형

숫자형 : 코틀린엔서 숫자를 표현하는 자료형

  • Double
  • Float
  • Long
  • Int
  • Short
  • Byte

문자형 : 코틀린엔서 문자를 표현하는 자료형

  • String
  • Char
  • longStr 

문자열 출력 포맷 : $변수 또는 ${변수}

//Python Style 
koreanMsg = "안녕하세요"
print(f"출력결과 : {koreanMsg}")

// Java Style
val koreanMsg = "안녕하세요"
println("출력결과 : "+ koreanMsg)

// Kotiln Style
val koreanMsg = "안녕하세요"
println("출력결과: $koreanMsg")
println("출력결과: ${koreanMsg}")

배열 : 코틀린에서 배열을 표현하는 자료형

  • Array<타입>
  • arrayOf()를 사용해서 배열 생성과 초기화를 한번에 수행할 수 있다. 
val numbers1 : Array<Int> = arrayOf(1,2,3,4,5)
var numbers2 = arrayOf(1,2,3,4,5)

 

4.반복문

배열 반복하기 : for ( n in [배열] ) << 무조건 괄호! 

val numbers = arrayOf(1,2,3,4,5,6,7,8,9,10)
var sum = 0

for (n in numbers){
    sum +=n
}

println("sum of numbers is $sum")

 

iterator할때는 약간의 연산자 명시가 들어가긴 한다 

//1에서부터 10까지 iterate 하면서 출력
for(i in 1..10){
	println(i)
}

//역순으로 10에서부터 1까지 출력하기
for(i in 10 downTo 1){
	println(i)
}

//일정 간격으로 동작시키기
for(i in 1..10 step 2){
	println(i)
}

//끝 번호를 제외하고 출력하기
for(i in 1 until 10){
	println(i)
}

 

5. 조건문

기본 if문은 자바와거의 동일하다.

val x = 10
val y = 15

if(x < y){
	println("true")
}
else{
	println("false")
}

그리고 조금더 간단하게 If문으로 나온 결과 자체를 변수에 저장해서 식으로 쓸 수도 있다(이건 약간 파이썬이랑 비슷하다)

var a = 7
var b = 2
var bigger = if (a > b) a else b
var smaller = if (a > b) b else a

 

대신 자바에서 switch문을 when이라고 쓴다.

if문을 반복적으로 쓰지 않고 여러가지 조건을 쓸때 사용한다.

//Java
int x = 5;

switch(x){
	case 1:
    	System.out.println("1");
        break;
    case 5:
    	System.out.println("5");
        break;
    default:
    	break;
}

//Kotlin
val x = 5

when(x){
	1 -> println("1")
    5 -> println("5")
    else -> println("10")
}

그리고 똑같이 간단하게 이렇게 when절로 나온결과 자체를 변수에 저장해서 식처럼 사용할수 있다. 

var NUMBER_ONE : Int    = 1
var NUMBER_TWO : Int    = 2
var NUMBER_THREE : Int  = 3

var numberTest = NUMBER_ONE

var testNumber = when (numberTest){
    NUMBER_ONE -> 1
    NUMBER_TWO -> 2
    NUMBER_THREE -> 3
}

println("testNumber result : $testNumber") // testNumber result : 1

 

참고

https://velog.io/@eoqkrskfk94/%EC%BD%94%ED%8B%80%EB%A6%B0%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95

728x90
반응형