▌ TRANSMISSION · [CONCEPT]

Kotlin Basic


Kotlin Basic

Kotlin이란?

Kotlin은 JetBrains에서 개발한 현대적인 정적 타입 프로그래밍 언어로, Java Virtual Machine(JVM) 위에서 실행된다.

Kotlin은 오픈소스 언어이며, 간결하고 표현력이 뛰어나다는 특징이 있다. 또한 Java와의 상호 운용성이 매우 뛰어나 기존 Java 코드와 함께 사용할 수 있고, 함수형 프로그래밍 패러다임도 지원한다.

Kotlin은 특히 최신 Android 개발에서 널리 사용된다.

개발자들은 Kotlin이 제공하는 강력한 도구와 기능을 활용해 효율적이고 안정적이며 사용자 친화적인 Android 애플리케이션을 만들 수 있다. 현대적인 문법과 안전성 기능 덕분에 Kotlin은 새로운 프로젝트뿐만 아니라 기존 Java 기반 Android 프로젝트에서도 선호되는 언어가 되었으며, 더 빠른 개발 과정과 향상된 앱 성능을 가능하게 한다.

Kotlin의 특징과 장점

  1. Java에 비해 불필요하게 반복되는 코드를 줄여준다.
  2. 일상적인 프로그래밍 작업을 더 간단한 문법으로 작성할 수 있다.
  3. 런타임 오류를 줄이기 위해 내장된 null 안전성 기능을 제공한다.
  4. Java와의 상호 운용성이 뛰어나다
  5. 기존 Java 코드베이스와 쉽게 통합할 수 있다.
  6. Java 라이브러리와 프레임워크를 완벽하게 사용할 수 있다.
  7. 비동기 및 논블로킹 프로그래밍을 위한 가벼운 스레드를 지원한다.

Kotlin 실습장 (Kotlin Playground)

Kotlin Playground는 별도의 프로그램을 로컬에 설치하지 않고도 Kotlin 코드를 작성하고 실행하며 테스트할 수 있는 온라인 개발 환경이다.

alt text

이제 문법에 대해 알아보자.

function

fun main() {
    println("Hello, Kotlin!!!")
}
  • fun : Kotlin에서 함수를 정의할 때 사용하는 키워드
    • main : 함수의 이름. Kotlin에서 main 함수는 프로그램의 시작점 역할을 한다. 프로그램을 실행하면 main 함수 안에 작성된 코드가 가장 먼저 실행된다.
    • () : 함수의 매개변수 목록을 정의할 때 사용한다. 위 예제에서는 main 함수가 아무 매개변수도 받지 않기 때문에 소괄호 안이 비어 있다.
    • {} : 함수의 본문을 감싸는 역할을 한다. 중괄호 안에는 실제로 실행될 코드가 작성된다.
  • println() 함수
    • println()은 Kotlin에 내장된 함수로, 전달받은 텍스트나 값을 콘솔에 출력한 뒤 줄바꿈을 해준다. (print line 의 약어)

Parameter

println("Hello, Kotlin!")
println(42)
println(3.14)

println(value)

  • 매개변수(Parameter)
    • value : 화면에 출력하고 싶은 문자열, 숫자, 또는 표현식을 의미한다.
println(10+20)
  • Adding Expressions (표현식 추가하기)
    • 위 예시처럼 표현식의 결과를 바로 출력할 수도 있다.

Variables

변수는 메모리 안에 값을 저장하는 이름이 붙은 공간이다. 프로그램이 실행되는 동안 이 값을 사용하거나 변경할 수 있다.

Kotlin에서 변수는 특정 타입과 함께 선언해야 한다. 또는 할당된 값을 기준으로 컴파일러가 타입을 자동으로 추론할 수도 있다.

Kotlin은 값의 변경 가능 여부에 따라 두 가지 주요 변수 타입을 제공한다.

var (Variable)

var는 변경 가능한 변수이다. 초기화한 뒤에도 값을 변경할 수 있다.

프로그램 실행 중 변수의 값을 업데이트하거나 다시 할당해야 할 때 사용한다.

var counter = 10
counter = 20 // 허용

val (Variable)

val은 변경할 수 없는 변수이다. 한 번 값을 할당하면 이후에 다시 값을 바꿀 수 없다.

값이 변하지 않아야하는 경우에 사용한다.

val pi = 3.14
pi = 3.15 // 불가

Key Points about Variables

Type Inference (타입 추론)

Kotlin은 변수에 할당된 값을 보고 변수의 타이블 자동으로 추론할 수 있다. 따라서 항상 타입을 직접 명시할 필요는 없다.

val message = "Hello, Kotlin!" // String으로 추론됨
var number = 42 // Int 로 추론됨

Declaration with Explicit Type (명시적 타입 선언)

코드를 더 명확하게 작성하거나 특정 타입을 강제하고 싶을 때는 타입을 직접 명시할 수 있다

val name: String = "John"
var age: Int = 25

Data Types in Kotlin

Kotlin은 정적 타입 언어이다.

즉, 각 변수의 타입이 컴파일 시점에 정해진다는 뜻이다.

Kotlin은 데이터를 효율적으로 저장하고 처리하기 위해 다양한 데이터 타입을 지원한다.

1. Numbers

  • Interger Types
    • Byte: 8-bit signed integer (-128 to 127).
    • Short: 16-bit signed integer (-32,768 to 32,767).
    • Int: 32-bit signed integer (-2,147,483,648 to 2,147,483,647).
    • Long: 64-bit signed integer (-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807).
val intval: Int = 100
val longval: Long = 10000000000L
val byteVal: Byte = 127
  • Floating-Point Types
    • Float: 32-bit floating-point number.
    • Double: 64-bit floating-point number (higer precision)
val pi: Float = 3.14F
val e: Double = 2.718281828459045

2. Characters

Char는 하나의 문자를 나타내며, 작은 따옴표로 감싸서 표현한다.

val letter: Char = 'A'

3. Strings

String은 여러 문자들이 모여 있는 형태이며, 큰따옴표로 감싸서 표현한다.

Kotlin에서 문자열은 불변이다. 즉, 한 번 생성된 문자열의 내용은 변경할 수 없다.

val message: String = "Welcome to Kotlin!"

이 불변이라는건 불변 객체를 말하는데,,, 예시를 들어보면 다음과 같다.

var name = "Kotlin"
name = "Java"

이건 가능하다. 근데 다음 예시는 가능하지 않다.

var text = "Kotlin"
text[0] = 'J' // Error

다음과 같이 문자열의 첫 글자 K를 J로 직접 바꾸는 행위는 불가능 하다.

만약 그렇게 하고 싶다면 새 문자열을 만들어서 다시 넣는 방식을 써야한다.

var text = "Kotlin"
test = "J" + text.substring(1)

println(text)

4. Boolean

Boolean 타입은 true 또는 false 값을 나타낸다.

val isKotlinFun: Boolean = true
val isTough: Boolean = false

5. Array

Array는 같은 타입의 요소들을 모아 놓은 컬렉션이다.

val numbers = arrayOf(1, 2, 3, 4, 5)
println(numbers[0]) // 출력: 1

각 요소는 다른 언어들처럼 인덱스 번호로 접근할 수 있다.

6. Nullable Type

Kotlin은 NullPointerException을 방지하기 위해 nullable 타입을 제공한다.

NullPointerException(NPE)

  • 아무것도 가리키고 있지 않은(null) 참조를 실제 객체인 것처럼 사용하려고 할 때 발생하는 에러
    • ex
      String name = null;
      int length = name.length(); // 여기서 NullPointerException이 발생한다.

기본적으로 변수는 null 값을 가질 수 없으며, null을 허용하려면 타입 뒤에 ?를 붙여 명시적으로 nullable 타입으로 선언해야한다.

var name: String? = null
name = "Kotlin"

위 예시로 이야기를 해보자면, 일반적인 String 타입은 반드시 문자열 값을 가져야한다.

Defining and Calling Functions

함수는 재사용할 수 있는 코드를 하나로 묶어 주기 때문에 프로그램을 더 체계적이고, 읽기 쉽고, 유지보수하기 좋게 만들어준다.

함수는 특정 작업을 수행하는 재사용 가능한 코드 블록이며, 함수를 사용하면 코드를 정리하기 쉽고, 반복되는 코드를 줄일 수 있으며, 코드의 가독성도 향상된다.

1. Function Declaration (함수 선언)

Kotlin에서 함수는 fun 키워드를 사용하여 선언한다.

그 뒤에는 함수 이름, 매개변수, 반환 타입, 함수 본문이 이어진다.

fun functionName(parameter1: Type1, parameter2: Type2, ...): RetrunType {
  // 함수 본문
  return value
}
  • fun : 함수를 선언하는 키워드
  • functionName : 함수 이름
  • parameters : 함수가 입력받을 수 있는 값
  • ReturnType : 함수가 반환하는 값의 타입. 반환하는 값이 없다면 Unit을 사용한다.

Ex.

fun add(a: Int, b: Int): Int {
  return a + b
}

2. Function Invocation (함수 호출)

함수를 한 번 정의하면, 함수 이름 뒤에 소괄호를 붙여 호출할 수 있다.

함수가 필요로하는 값(Parameter)이 있다면 소괄호 안에 인수로 전달한다.

val result = functionName()

Ex.

fun main() {
  val sum = add(5,3)
  println("Sum: $sum") // 출력: Sum: 8
}

fun add(a: Int, b: Int): Int {
  return a + b
}

여기서 사용된 $ 는?

  • $ : Kotlin에서 문자열 템플릿(String Template) 또는 문자열 보간(String Interpolation)에 사용하는 기호이다.
    • 계산식이나 속성을 넣을 때는 ${} 형태로 사용한다. ex. println("Length: ${name.length}")

3. Return Types

함수는 어떤 타입의 값이든 반환할 수 있다. 만약 함수가 아무 값도 반환하지 않는다면, 기본적으로 Unit을 반환한다.

Example with Return Type

fun multiply(a: Int, b: Int): Int {
  return a * b
}

Example without Return Type (Unit)

fun greet(name: String): Unit {
  println("Hello, $name!")
}

Default and Named Parameters

Kotlin은 함수 호출을 더 유연하고 읽기 쉽게 만들기 위해 기본 매개변수 값과 이름있는 인수 같은 강력한 기능을 제공한다.

1. Default Parameter Values

함수의 매개변수에 기본값을 지정할 수 있다.

이렇게 하면 함수를 호출할 때 해당 인수를 생략할 수 있다.

fun functionName(parameter1: Type1 = defaultValue1, parameter2: Type2 = defaultValue2, ...) : ReturnType {
  // Function body
}

Ex.

fun greet(name: String, greeting: String = "Hello") {
    println("$greeting, $name!")
}

Invocation.

fun main() {
    greet("Alice") // Uses default greeting
    greet("Bob", "Hi") // Overrides default greeting
}

Output.

Hello, Alice!
Hi, Bob!

2. Named Arguments

이름 있는 인수는 함수를 호출할 때 매개변수의 이름을 직접 지정하는 방식이다.

이를 사용하면 코드의 가독성이 높아지고, 인수를 순서와 상관없이 전달할 수 있다.

fun functionName(parameter1: Type1, parameter2: Type2) {
    // Function body
}

fun main() {
    functionName(parameter2 = value2, parameter1 = value1)
}

Ex.

fun displayInfo(name: String, age: Int) {
    println("Name: $name, Age: $age")
}

fun main() {
    displayInfo(age = 25, name = "Charlie") // 이름 있는 인수를 사용하여 순서를 바꿔 전달
}

Output.

Name: Charlie, Age: 25

Reference


← ALL POSTS