Kotlin에서 상수 만들기

David Mbochi Njonge 2023년1월30일
  1. Kotlin에서 클래스 상수 사용
  2. Kotlin에서 싱글톤 사용
  3. Kotlin에서 최상위 상수 사용
  4. Kotlin에서 상수가 포함된 별도의 파일 사용
  5. 결론
Kotlin에서 상수 만들기

상수는 값이 항상 알려진 데이터를 저장하는 데 사용되며 프로그램 실행 중에 데이터가 변경되지 않습니다. 상수는 변수가 프로그램 실행 중에 데이터를 변경할 수 있다는 점에서 변수와 구별됩니다.

예를 들어 오토바이 시뮬레이터를 개발 중이라고 가정해 보겠습니다. 바퀴의 수와 같이 오토바이의 다른 속성은 수명 동안 절대 변경되지 않습니다.

바퀴 수가 변경되지 않도록 하기 위해 애플리케이션에서 상수를 선언하고 오토바이가 가질 수 있는 바퀴 수에 할당합니다. 우리는 상수를 사용하여 오토바이에 2개 대신 4개의 바퀴를 제공하는 것과 같이 사용자 입력의 오류를 방지합니다.

이 튜토리얼에서는 Kotlin에서 상수를 생성하는 방법, 사용된 명명 규칙 및 애플리케이션에 상수를 포함하는 방법을 배웁니다.

Kotlin에서 클래스 상수 사용

IntelliJ로 이동하여 File > New > Project를 선택하여 새 Kotlin 프로젝트를 만듭니다. 프로젝트 이름 또는 원하는 이름으로 kotlinConstants를 입력합니다.

언어 섹션에서 Kotlin을 선택하고 시스템 빌드 섹션에서 Intellij를 선택합니다. 생성 버튼을 눌러 프로젝트를 생성합니다.

kotlin 폴더 아래에 com/constants 폴더 구조를 만듭니다. constants 폴더 아래에 Main.kt 파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.

package com.constants

class Car(private val name: String){
    /**
     * This is a constant that is only used
     * inside this class
     */
    private val numberOfWheels = 4
    /**
     * The companion object defines a constant
     * that exists only as a single copy and
     * Can also be used outside the class
     */
    companion object{
        const val NUMBER_OF_WHEELS = 4
    }
    fun showMessage(): String{
        return "A ${this.name} has ${this.numberOfWheels} wheels"
    }

}
fun main() {
    val nissan = Car("Nissan");
    println(nissan.showMessage());
    println("Number of wheels = ${Car.NUMBER_OF_WHEELS}");
}

Car 클래스 내부에 두 개의 상수를 선언했습니다. private 키워드를 사용하여 선언된 첫 번째 상수는 이 클래스에서만 사용하기 위한 것이며 클래스 외부에서 액세스할 수 없습니다.

명명 규칙은 클래스 내에서만 사용되기 때문에 낙타의 경우 명명 규칙을 사용했습니다.

두 번째 상수는 클래스의 컴패니언 개체 내에서 선언됩니다. 컴패니언 개체는 이 클래스에 속하는 상수와 함수를 선언하는 데 사용됩니다. 즉, 클래스 개체를 사용하여 인스턴스화할 수 없습니다.

이러한 상수는 Java의 정적 필드 및 메소드와 유사합니다. 상수를 호출하기 위해 상수 사본이 하나만 존재하기 때문에 일반적으로 클래스를 사용합니다.

컴패니언 개체 내부에 선언된 상수는 클래스 외부에서 액세스할 수 있으며 이러한 상수에 사용되는 명명 규칙은 대문자와 밑줄의 조합입니다.

메인 메소드는 Car()를 호출하여 새로운 Car 객체를 생성합니다. showMessage() 메서드는 클래스 내에서 사용되는 상수를 사용하여 값이 포함된 메시지를 콘솔에 기록합니다.

마지막 println() 메시지는 컴패니언 개체를 사용하여 선언된 상수 값을 기록합니다. 코드를 실행하여 프로그램이 다음을 출력하는지 확인합니다.

출력:

A Nissan has 4 wheels
Number of wheels = 4

Kotlin에서 싱글톤 사용

싱글톤은 특히 고급 언어에서 프로그래밍의 디자인 패턴입니다. 싱글톤 디자인 패턴은 애플리케이션에서 공유해야 하는 리소스가 있고 리소스를 만드는 데 비용이 많이 드는 상황에서 사용됩니다.

싱글톤을 사용하는 경우 애플리케이션의 전체 수명 동안 하나의 인스턴스만 생성됩니다.

이전 코드에 주석을 달고 다음 코드를 복사하여 주석 뒤에 있는 Main.kt 파일에 붙여넣습니다.

package com.constants

object Configuration{
    const val USERNAME = "john"
    const val PASSWORD = "1234"
}

fun userLogin(user: String, pass: String): String{
    return "$user logged in with password $pass"
}

fun main() {
    println(userLogin(Configuration.USERNAME,
        Configuration.PASSWORD));
}

이 예에서는 object 키워드를 사용하여 싱글톤을 만들었습니다. Kotlin에서 싱글톤을 만들려면 항상 이 구문을 사용하세요.

뒤에서 컴파일러는 생성자를 비공개로 만들고 구성에 대한 참조를 만들고 정적 블록에서 초기화합니다. 싱글톤은 정적 필드에 처음 액세스한 후에만 초기화됩니다.

userLogin()은 싱글톤 속성을 사용하도록 정의한 사용자 지정 메서드입니다. 값에 액세스하기 위해 속성 이름이 뒤에 오는 싱글톤 이름을 호출합니다.

이것은 컴패니언 개체에 선언된 상수로 수행한 작업과 유사하지만 이 접근 방식은 리소스를 덜 사용합니다. 코드를 실행하고 프로그램이 다음을 출력하는지 확인하십시오.

출력:

john logged in with password 1234

Kotlin에서 최상위 상수 사용

이전 코드에 주석을 달고 다음 코드를 복사하여 주석 뒤에 있는 Main.kt 파일에 붙여넣습니다.

package com.constants

const val CONNECTION_POOL = 10

class DBDriver{
   companion object{
       fun isConnectionExceeded(value: Int): Boolean{
           return (value > CONNECTION_POOL)
       }
   }
}

fun main() {
    println(DBDriver.isConnectionExceeded(11));
}

최상위 상수는 함수, 클래스 또는 인터페이스로 묶이지 않습니다. 즉, 객체를 생성하지 않고도 클래스 외부에서 호출할 수 있습니다.

이 예제에서는 CONNECTION_POOL이라는 최상위 상수를 선언하고 isConnectionExceeded() 메서드 내에서 이름을 전달하여 사용했습니다.

코드를 실행하고 아래 표시된 대로 예상 계산을 수행하기 위해 평소와 같이 상수 값을 읽어야 합니다.

출력:

true

Kotlin에서 상수가 포함된 별도의 파일 사용

com ​​폴더 아래에 const라는 새 패키지를 만듭니다. consts 폴더 아래에 NetConstants.kt라는 파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.

package com.consts

const val PORT = 8080
const val PROTOCOL = "DNS"
const val HOST_ADDRESS = "192.168.1.0"

위 파일에 정의된 상수는 최상위 상수와 유사하지만 다른 응용 프로그램 부분과 함께 별도의 파일에 선언됩니다.

다음 예제에서는 동일한 응용 프로그램의 별도 파일에서 상수를 사용하는 방법을 보여줍니다. Main.kt 파일에서 다룬 마지막 예제에 주석을 달고 주석 뒤에 다음 코드를 복사하여 파일에 붙여넣습니다.

package com.constants

import com.consts.HOST_ADDRESS
import com.consts.PORT
import com.consts.PROTOCOL

class Server{
   companion object{
       fun connectServer(port: Int, protocol: String, host: String): String{
           return "application connected to " +
                   "$host using port " +
                   "$port through" +
                   " $protocol"
       }
   }
}
fun main() {
    println(Server.connectServer(PORT, PROTOCOL, HOST_ADDRESS));
}

이 예제는 클래스의 컴패니언 객체 내부에 선언된 connectServer() 메서드를 정의합니다. 이 방법은 NetConstants.kt 파일에서 정의한 세 가지 상수를 사용합니다.

이것은 상수의 이름을 메서드에 전달하고 정규화된 상수의 이름을 클래스로 가져옴으로써 달성됩니다. 다음은 실행 후 애플리케이션의 출력입니다.

application connected to 192.168.1.0 using port 8080 through DNS

결론

이 튜토리얼에서는 Kotlin 애플리케이션에서 상수를 생성하는 데 사용할 수 있는 다양한 방법을 배웠습니다. 우리가 배운 접근 방식에는 클래스 상수, 싱글톤 및 최상위 상수 사용이 포함되며 마지막으로 별도의 파일에 선언된 상수를 사용하는 방법을 다루었습니다.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub