Hello World!라고 입력된 아주 간단한 내용입니다.
하지만 사실 여기에는 많은 내용이 들어있습니다.
앞으로 많은 것을 공부하게 될 것이기에
오늘은 프로젝트의 실행 원리에 대해 알아보겠습니다.
코틀린의 main() 함수 - 프로그램 실행 진입점
자바 같은 객체 지향 언어에서 프로그램을 실행하려면 최소한 하나의 클래스와 그 안에 main() 함수가 있어야 합니다.
하지만 코틀린은 선언할 클래스가 없는데도 불구하고 main() 함수와 print() 함수를 통해
콘솔에 문자열 "Hello World!"를 출력하고 있습니다.
어떻게 된 일일까요??
우리가 작성한 코틀린 코드는 JVM에서 실행되며,
main() 함수가 있는 파일 이름을 기준으로 자바 클래스가 자동으로 생성됩니다.
자동 생성된 자바 클래스는 Tools -> Kotlin -> Show Kotlin Bytecode를 눌러서 확인할 수 있어요!
그 이후 상단의 Decompile 버튼을 클릭하여 확인할 수 있습니다.
public final class MainKt {
public static final void main(String[] args) {
String var0 = "Hello World!";
System.out.println(var0);
}
public static void main(String[] var0) {
main();
}
}
컴파일러의 버전에 따라 결과가 약간씩 다르겠지만 이렇게 나오게 되었습니다.
여기서부턴 함수를 조금 구분하기 위해 클래스에 포함된 함수는 메서드, 그렇지 않은 함수는 그대로 함수라고 부르겠습니다.
생성된 소스에서 main() 메서드를 보시면 MainKt 클래스 안에 속한 멤버 메서드로 선언이 되어있습니다.
이것은 JVM에서 실행되기 위해 문자열은 String var0으로 선언되어
System.out.println()에 의해 콘솔 장치에 출력이 되는 겁니다.
변환된 main() 메서드의 의미
코드에 정의된 main() 메서드를 다시 한번 봅시다
public static final void main(String[] args) {
public은 가시성 지시자로 이 메서드의 접근 방법을 가리키고 있습니다.
public은 MainKt 클래스의 외부 어디에서도 접근할 수 있다는 의미입니다.
static은 이 메서드가 정적 메서드임을 나타내고 있습니다.
static으로 선언하면 프로그램의 정적 메모리 영역에 객체가 만들어지기 때문에
객체의 생성 없이 호출해 사용할 수 있게 됩니다.
final은 최종 메서드임을 나타내고,
void는 메서드가 반환할 것이 없는 경우 지정합니다.
코틀린의 main() 메서드에서 매개변수를 사용할 경우
main() 메서드에서 매개변수 args: Array <String>을 사용하면
자바에서는 String [] args로 변환됩니다.
이 args는 main()에 전달할 외부의 인자들을 가리키고,
명령행에서 입력받은 값들이 차례로 배열에 들어가게 됩니다.
명령행 인자를 사용하는 방법은 다음과 같습니다.
이런 식으로 작성해서 사용한다면
아래처럼 오류가 발생한다.
명령행에서 아무런 인자가 설정되어 있지 않기 때문이다.
명령행 인자를 어떻게 설정할까?
명령행 인자를 설정하는 방법은
Run -> Edit Configurations 메뉴를 사용하여 Program arguments에 필요한 명령한 인자를 나열하면 된다.
이런 식으로 넣어주게 되면
정상적으로 작동하게 된다.
'Kotlin' 카테고리의 다른 글
코틀린에서 타입 확인하기 (0) | 2023.01.22 |
---|---|
코틀린의 스마트 캐스트(Smart cast)란? (0) | 2023.01.21 |
코틀린에서 null을 관리하는 방법 [Do it! 코틀린 프로그래밍] (0) | 2023.01.08 |
코틀린의 자료형 [Do it! 코틀린 프로그래밍] (0) | 2023.01.08 |
Kotlin의 탄생 배경 (0) | 2022.11.27 |