Kotlin에서 Class는 객체지향 프로그래밍의 기본 요소입니다. Class는 데이터와 이를 다루는 함수들을 묶어서 캡슐화하고, 관련 있는 메서드와 속성을 함께 묶어서 구성합니다. 또한, Class를 통해 생성된 객체는 인스턴스라고 하며, 객체는 독립적인 메모리 공간을 가지고 있어서 서로 영향을 주지 않습니다.
Kotlin에서 Class를 선언할 때는 "class" 키워드를 사용합니다. 아래는 Kotlin에서 Class를 선언하는 예시입니다.
class Person {
var name: String = ""
var age: Int = 0
fun sayHello() {
println("Hello, my name is $name and I'm $age years old.")
}
}
위 예시에서는 "Person"이라는 Class를 선언했으며, Class 내부에는 "name"과 "age"라는 변수와 "sayHello()"라는 함수가 포함되어 있습니다.
Class를 사용하면 코드의 재사용성이 높아지고, 유지보수가 용이해집니다. 또한, 객체지향 프로그래밍에서는 상속을 통해 기존 Class를 확장할 수 있으므로 코드의 재활용성이 더욱 높아집니다.
Kotlin에서는 Class를 선언할 때 추가적으로 상속을 지정할 수 있습니다. 상속을 위해서는 콜론 ":"을 사용하며, 상속할 부모 Class를 지정합니다. 예를 들어, 아래와 같이 Person Class를 상속받는 Student Class를 선언할 수 있습니다.
class Student : Person() {
var grade: Int = 0
var major: String = ""
fun introduce() {
println("I'm a student, my grade is $grade and my major is $major.")
}
}
위 예시에서는 Person Class를 상속받는 Student Class를 선언했습니다. Student Class 내부에는 "grade"와 "major"라는 변수와 "introduce()"라는 함수가 추가되어 있습니다.
본인의 경우는 info: kotlinc-jvm 1.4.31 (JRE 15.0.2+7) 이렇게 출력이 나왔다.
우리가 늘 하는 Hello World 만들기
적절한 폴더에 hello.kt라는 파일을 만들고 아래와 같이 코드를 넣어본다.
//hello.kt
fun main() = println("Hello World")
cli로 실행시키기
kotlinc-jvm hello.kt -d hello.jar
위 명령어를 실행시키면 hello.kt 코틀린 코틀린코드를 Java바이트 코드로 컴파일시키고 hello.jar를 만들어둔다. jar를 java툴을 이용해서 실행시키면된다.
java -classpath hello.jar HelloKt
hello.kt는 main함수만 가지고있고, 클래스가 아니기때문에 코틀린 컴파일러가 자동으로 확장자를 제거한 파일 이름을 가지고 Kt라는 접미사를 추가한 클래스이름을 만든다.
실행결과는 당연히 Hello World가 나온다.
classpath cli옵션을 열거하지않고, jar옵션으로 실행 가능하다. main()함소를 찾을때 코틀린 컴파일러가 jar 파일에 Main-Class 매니패스트 어트리뷰트를 추가한다.
java -jar hello.jar
현재는 코틀린 스탠다드 라이브러리를 사용하지 않았기 때문에 실행이 잘 되지만 코틀린 스탠다드 라이브러리의 클래스와 함수들을 사용하는 경우 java툴로만 실행한다면 java.lang.NoClassDefFoundError예외가 발생하면서 실패한다. 이를 방지하기위해서는 kotlin-stdlib.jar파일을 클래스패스에 추가해줘야한다.
kotlinc-jvm hello.kt -d hello.jar
java -classpath hello.jar:$KOTLIN_PATH/lib/kotlin-stdlib.jar HelloKt
//위도우인경우 %KOTLIN_PATH% 를 사용, 콜론(:)이 아닌 세미콜론(;)으로 구문해야한다. 등록된 환경변수를 사용하면된다.
ide로 실행하기
코틀린 공식 홈페이지 및 각 ide의 홈페이지와 라이브러리를 참고하면 될거같다. 여기서는 굳이 언급하지 않도록하겠다.
REPL실험
cli에서 kotlinc-jvm 이라고 입력하면 REPL이 실행된다. 아래와같이 조금 사용해보자.
//kotlinc-jvm
Welcome to Kotlin version 1.4.31 (JRE 15.0.2+7)
Type :help for help, :quit for quit
>>> 7 + 5
res0: kotlin.Int = 12
>>> val list = listOf(1,2,3)
>>> list.map{ it * 2}
res2: kotlin.collections.List<kotlin.Int> = [2, 4, 6]
>>>
종료할땐 컨트롤D 를 사용하거나 :quit 라고 입력한다.
REPL에선 이미 존재하는 코드를 불러와서 실행시킬수도 있다.
kotlinc-jvm
Welcome to Kotlin version 1.4.31 (JRE 15.0.2+7)
Type :help for help, :quit for quit
>>> :load hello.kt
>>> main()
Hello World!
>>>
이렇게 REPL에선 존재하는 코드를 컴파일 없이 실행할 수 있다.
스크립트로 실행하기
코틀린은 스크립트로 사용가능하다. 여타 스크립트에 비해서 좋은점이라면 스크립트를 위해 따로 문법 공부를 할 필요가 없다는 점이 있을것이고, 코틀린 스크립트는 문법 오류가 있는 경우 스크립트 실행 전에 실패를하기때문에 컴파일 후 칠행하는것 만큼 안전하다.
연습을 위해서 디렉토리에서 .kts 확장자를 가진파일을 리스팅 하는 스크립트를 만들어보자.
지금까지 작성한 코틀린 파일과 별반 타이가 없다. 차이점이라면 확장자가 kts라는것 뿐이다. 이 코드는 JDK의 java.io 패키지의 File 클래스를 사용한다. 그리고 코틀린이 해당 클래스에 추가한 확장 함수를 사용한다. 현재 디렉토리에 있는 모든 파일중 파일명이 kts로 끝나는 파일만 걸러내서 잡고 해당 파일의 경로를 출력한다.
스크립트 실행을 위해선 kotlinc-jvm 커맨드를 사용한다. -script옵션을 통해서 컴파일 대신 스크립트로써 즉시 실행시킨다.
kotlinc-jvm -script listktsfiles.kts
Unix-Like 시스템을 사용한다면 kotlinc-jvm -script라는 접미어 대신 셔뱅(shebang)을 사용하면된다.
SELECT
DISTINCT O.NAME
FROM
SYSDEPENDS AS D
INNER JOIN
SYSOBJECTS AS O
ON
D.ID = O.ID
WHERE
O.XTYPE = 'P'
AND D.DEPID =
(
SELECT
ID
FROM
SYSOBJECTS
WHERE
NAME = '테이블명'
)