본문 바로가기

Programing/JVM(Java, Kotlin)

[Java] Inner class 에도 main 함수(진입점)이 가능하나?

package goharrm;

public class Outer {
    static class StaticInner {
        public static void main(String[] args) {
            System.out.println("main method of Static inner class is running");
        }
    }

    public static void main(String[] args) {
        System.out.println("main method of outer class is running");
    }
}

내부 클래스에 대한 질문을 계속 올리는 난바 님이 제목과 같은 질문을 올렸다.

사실 뭐가 문제냐는 질문이지만 특별히 문제가 없다.

https://cafe.naver.com/javachobostudy/160871

코드는 다음과 같다.

 

콘솔에서 실행

이전 글인 [Java] Inner clsss의 접근 범위 를 읽어보면 inner class는 별도의 클래스 파일이 생긴다는 것을 알게 되었을 것이다.

따라서 main 함수는 각각 클래스 파일에 담기기 때문에 엔트리 포인트가 겹쳐서 문제가 발생할 일은 없다.

둘다 콘솔에서 실행이 가능하다.

다만 주의 해야 할점은 윈도우의 경우 $가 별로 중요한 의미를 가지고 있지 않기에 그냥 써도 되나,
리눅스mac OS의 경우에는 역슬래시로 이스케이핑 해주어야 한다.(스크린 샷처럼)

 

IntelliJ IDEA 에서 실행

인텔리 제이는 각각 엔트리 포인트(main 함수)를 실행하는 것이 간편한데, 문법을 인식해서 실행 가능한 곳에 Play 아이콘 같은 녹색 삼각형버튼이 생기기 때문이다.

StaticInner 의 main을 실행
Outer의 main을 실행

 

eclipse 에서 실행

반면 이클립스는 좀 불편하긴 하지만 역시 취사 선택이 가능하다.

클래스를 찍고 오른쪽을 누르고 나오는 팝업 메뉴에서 Run As > Java Application 을 선택하면,

엔트리 포인트를 선택할 수 있는 창이 뜬다.

main 함수를 선택하는 창

따라서 뭐가 틀리고 맞고의 문제가 아니다.