Kotlin 기본1

Seongho·2021년 10월 15일
0

Kotlin

목록 보기
1/6

1. 변수와 자료형

1.1 표기법

  • 클래스 이름은 파스칼 표기법
    • ClassName
  • 함수나 변수 이름은 카멜 표기법
    • functionName

1.2 변수 선언

  • var
    • 일반적으로 통용되는 변수
    • 언제든지 읽기 쓰기 가능
    • 기본적으로 null을 허용하지 않음
    • 값을 할당하지 않은 채로 사용할 수 없음
  • val
    • 선언시에만 초기화 가능
    • 중간에 값을 변경할 수 없음(const?)
    • 변경되면 안 되는 값을 val로 선언하자
  • 클래스에 선언된 변수는 Property
  • Scope 내에 선언된 변수는 Local Variable
fun main() {
/*
    var a: Int
    println(a) // 에러 발생
*/
    var a: Int = 123
    println(a)
}

프로그램 특성 상 변수에 null을 허용해야 할 때(값이 할당되지 않았음을 표현해야 할 때)

fun main() {
    var a:Int? = null // null Pointer Exception이 발생할 수 있으므로 주의
}

lateinit

lazy

1.3 Primitive Type

정수형

  • Byte (8bits)
  • Short (16bits)
  • Int (32bits)
  • Long (64bits)

실수형

  • Float (32bits)
  • Double (64bits)

사용 예시

fun main() {
    // 10진수 표현(기본)
    var intValue:Int = 1234
    var LongValue:Long = 1234L // L을 붙여 더 큰 메모리를 사용함을 표시해야 함

    // 16진수 표현
    var intValueByHex:Int = 0x1af // 0x 붙이기

    // 2진수 표현
    var intValueByBin:Int = 0b10110110 // 0b 붙이기

    // 8진수 표기는 지원하지 않음
}
fun main() {
    // 소수의 경우 기본은 Double
    var doubleValue:Double = 123.5
    var doubleValueWithExp:Double = 123.5e10

    // float 형을 사용하면 뒤에 f를 붙여준다. 대문자여도 됨
    var floatValue:Float = 123.5f
}

문자형

  • Char
  • UTF-16 BE
  • 글자 하나하나가 2bytes의 메모리 공간을 사용한다.

fun main() {
    var charValue:Char = 'a'
    var koreanCharValue:Char = '가'
}

Boolean

  • true 또는 false 표기
fun main() {
		var booleanValue:Boolean = true
}

문자열

fun main() {
		val stringValue = "one line string test"
		
		val multiLineStringValue = """multiline
		string
		value
		"""
}

2. 형변환과 배열

2.1 형변환

  • toByte()
  • toShort()
  • toInt()
  • toLong()
  • toFloat()
  • toDouble()
  • toChar()
var a:Int = 54321
var b:Long = a.toLong()

변환될 자료형을 개발자가 직접 지정해야 한다.

2.2 배열

  • 한 번 선언할 때 전체 크기를 선언해줘야 한다.
  • 배열의 크기는 변경할 수 없다.
  • 다른 자료구조보다 빠른 입출력이 가능
fun main() {
		var intArr = arrayOf(1, 2, 3, 4, 5) // 1, 2, 3, 4, 5 가 들어있는 배열
		var nullArr = arrayOfNulls<Int>(5) // 빈 배열

		intArr[2] = 8 // 해당 인덱스에 값 할당 가능
		println(intArr[4]) // 인덱스 값 사용 가능
}

3. 타입추론과 함수

3.1 타입추론

변수나 함수를 선언할 때, 연산이 이루어질 때 자료형을 명시하지 않아도 코틀린이 자료형을 추론하는 것. 예를 들어 앞서 1장과 2장에서 문자열, 배열을 만들 때,

val stringValue: String = "문자열" // 얘가 아니라
val stringValue = "문자열" // 이렇게 씀

var intArr: Array<Int> = arrayOf(1, 2, 3, 4, 5) // 얘가 아니라
var intArr = arrayOf(1, 2, 3, 4, 5) // 이렇게 씀

변수가 선언될 때 할당된 값의 형태로 해당 변수가 어떤 자료형을 가지는지 추론이 가능하기 때문에 타입 추론이 가능하다.

타입 추론은 지금까지 알아본 대부분 자료형에서 가능하다.

fun main() {
		var a = 1234 // Int
		var b = 1234L // Long
		var c = 12.34 // double
		var d = 12.34f // float
		var e = 0xABCD // Int
		var f = 0b01010101 // Int
		var g = true // boolean
		var h = 'c' // character
}

⇒ 반드시 특정한 자료형으로 지정해야 하는 상황이 아니라면 타입 추론으로 코드량을 줄일 수 있다.

3.2 함수

fun main() {
		println(add(5, 6, 7))
}

// 입력값, 반환값 설정을 해준다.
fun add(a:Int, b:Int, c:Int): Int {
		return a + b + c
}

// 반환값이 없는 경우
fun add(a:Int, b:Int, c:Int) {
		return
}

함수가 단순한 역할을 하는 경우 단일 표현식 함수로 간단하게 표현할 수 있다.

3.3 단일 표현식 함수

// 단일 표현식 함수, 반환형은 추론되므로 생략 가능
fun add(a: Int, b: Int, c: Int) = a + b + c

4. 조건문과 비교연산자

4.1 조건문

fun main() {
		var a = 7

		if (a > 10) {
				println("a는 10보다 크다")
		} else {
				println("a는 10보다 작거나 같다")
		}
}

4.2 비교연산자

< ≤ > ≥ ==

좌측 변수가 우측 자료형에 호환되는지 확인하는 방법

  • a is Int
  • a !is Int

4.3 when문

하나의 조건을 여러 개의 값과 비교할 수 있다.

  • 부등호나 등호의 사용은 불가능하다.
  • 여러 개의 조건이 부합하는 경우 먼저의 조건이 실행된다.
fun main() {
		doWhen(1)
		doWhen("Dimo")
		...
}

// Any는 어떤 자료형이든 상관없이 호환되는 코틀린의 최상위 자료형
fun doWhen (a: Any) {
		when(a) {
				1 -> println("정수 1입니다.")
				"Dimo" -> println("디모의 코틀린 강좌입니다.")
				is Long -> println("Long 타입입니다.")
				!is String -> println("String 타입이 아닙니다.")
				else -> println("어떤 조건도 만족하지 않습니다.")
		}
}

// print 해보는게 아니라 조건에 따라 값을 할당하고 싶다면?
fun doWhen (a: Any) {
		var result = when(a) {
				1 -> "정수 1입니다."
				"Dimo" ->"디모의 코틀린 강좌입니다."
				is Long -> "Long 타입입니다."
				!is String -> "String 타입이 아닙니다."
				else -> "어떤 조건도 만족하지 않습니다."
		}
		println(result)
}

5. 반복문과 증감 연산자

5.1 반복문

  • 조건형 반복문
    • while, do while이 있다. (선후관계의 차이)
      // while
      fun main() {
      		var a = 0
      		while (a < 5) {
      				println(a++) // 0, 1, 2, 3, 4 출력
      		}
      
      		while (a < 5) {
      				println(++a) // 1, 2, 3, 4, 5 출력
      		}
      }
      // do while
      // 최소 한 번은 조건 없이 구문을 실행한 후 while로 조건을 확인함
      fun main() {
      		var a = 0
      		do
      		{
      			println(a++)
      		} while (a < 5)
      }
  • 범위형 반복문
    • for 범위가 파이썬과는 다르다. in a이상..b이하
      fun main() {
      		for (i in 0..9) {
      				print(i) // 줄을 떼지 않고 붙여서 출력할 때
      				// 결과는 0123456789
      		}
      
      		for (i in 0..9 step 3) {
      				print(i) // 0369
      		}
      
      		// 감소시키려면
      		for (i in 9 downTo 0 step 3) {
      		print(i) // 9630
      		}
      
      		// char 자료형에도 사용 가능
      		for (i in 'a'..'e') {
      				print(i) // abcde
      		}
      }

5.2 증감 연산자

변수 앞이나 뒤에 ++ — 등을 붙이는 경우

앞에 붙이는 경우

  • 전위 연산자
    • ++a

    • —a

      이미 계산된 값을 해당 구문에 적용

  • 후위 연산자
    • a++

    • a—

      증가하거나 감소된 값을 해당 구문이 아니라 다음 구문부터 사용

0개의 댓글