언어 및 도구들 공부/Java

Java 에서의 public 클래스와 main 메소드 1

Dr.Mlem 2024. 9. 23. 11:37

Q1.

Java에서 public 클래스와 main 메소드의 관계는 어떻게 되는거야?

 

 

 

Java에서 public class와 main 메소드는 서로 중요한 관계가 있습니다. 이 둘의 역할과 관계를 살펴보면, Java 프로그램이 어떻게 실행되는지 이해할 수 있습니다.

1. public class

  • Java 프로그램은 하나 이상의 클래스로 이루어져 있습니다. 클래스는 객체를 생성하는 틀을 제공하며, 데이터와 메소드를 포함할 수 있습니다.
  • public 키워드가 붙은 클래스는 모든 패키지에서 접근 가능한 클래스를 의미합니다. 즉, Java 프로그램을 실행할 때 프로그램의 진입점을 제공하는 클래스가 public으로 선언되어야 합니다.
  • 파일명과 public class 이름은 반드시 동일해야 합니다. 예를 들어, 클래스 이름이 MyApp이라면 파일 이름도 MyApp.java여야 합니다.

2. main 메소드

  • Java 프로그램의 실행 시작 지점(엔트리 포인트)은 main 메소드입니다.
  • main 메소드는 반드시 정적 메소드(static)여야 하며, 반환값이 없는(void) 메소드입니다. 그리고 메소드의 인자는 문자열 배열(String[] args)로 받아야 합니다. 즉, main 메소드는 아래와 같이 정의됩니다:
     
    public static void main(String[] args) {
        // 실행할 코드
    }
     
  • 이 메소드가 없으면 Java 프로그램은 실행되지 않습니다. Java 실행 환경(JVM)은 프로그램 실행 시 가장 먼저 main 메소드를 찾아서 그 안에 있는 코드를 실행합니다.

3. public class와 main 메소드의 관계

  • public class는 Java 파일의 클래스 구조를 정의하고, 그 안에 main 메소드를 포함함으로써 프로그램의 시작 지점을 제공합니다.
  • Java 프로그램이 실행되면, JVM은 지정된 public 클래스를 찾아 그 안에 있는 main 메소드를 실행합니다.

예를 들어, 아래와 같은 코드가 있을 때:

     public class MyApp {
         public static void main(String[] args) {
             System.out.println("Hello, World!");
         }
     }
  1. MyApp이라는 이름의 public 클래스를 정의했고, 이는 MyApp.java 파일에 있어야 합니다.
  2. main 메소드는 이 MyApp 클래스의 일부로, 프로그램 실행 시 JVM이 가장 먼저 실행할 코드입니다.

요약하자면, public class는 프로그램의 구조와 이름을 정의하고, main 메소드는 프로그램의 시작 지점을 제공하여 두 요소가 협력하여 Java 프로그램이 실행되도록 합니다.

혹시 더 궁금한 부분이 있으면 물어봐 주세요!


 

Q2.

그러면 하나의 자바 파일에는, 하나의 public 클래스와, 그 public 클래스 안에 main 메소드는 하나만 있는거야?

 

 

 

하나의 Java 파일에 하나의 public class와 그 안에 하나의 main 메소드가 있는 것이 일반적인 규칙이지만, 몇 가지 중요한 사항을 고려해야 합니다.

1. 하나의 자바 파일에 하나의 public class

  • Java 파일에는 오직 하나의 public class만 포함될 수 있습니다.
  • 만약 하나 이상의 public class를 정의하려고 하면 컴파일 오류가 발생합니다. 예를 들어:

    public class MyApp {
        // 클래스 내용
    }

    public class AnotherClass {
        // 클래스 내용
    }

    이런 식으로 한 파일에 두 개의 public class를 정의하면 컴파일러는 오류를 발생시킵니다. 이 규칙은 파일 이름과 public class의 이름이 동일해야 한다는 규칙과 연결됩니다. 즉, 하나의 파일에 두 개의 public class를 정의하면 파일 이름을 두 개로 만들 수 없기 때문에 오류가 나는 것입니다.
     

2. public class 안에 main 메소드는 반드시 하나만

  • 하나의 public class 안에는 하나의 main 메소드만 있어야 합니다.
  • main 메소드는 Java 프로그램의 진입점이기 때문에, 클래스 안에 여러 개의 main 메소드를 정의하는 것은 의미가 없습니다. JVM이 실행 시에 어떤 main 메소드를 실행해야 할지 혼란스러워지기 때문입니다.

예를 들어:

java
 
public class MyApp {
    public static void main(String[] args) {
        System.out.println("Main method 1");
    }

    public static void main(String[] args) {
        System.out.println("Main method 2");
    }
}

이런 식으로 두 개의 main 메소드를 정의하려고 하면 컴파일 오류가 발생합니다.

3. 하나의 파일에 여러 개의 클래스는 가능

  • public이 아닌 클래스들은 한 파일에 여러 개 정의할 수 있습니다.
  • 하지만 파일 이름과 동일한 이름의 public 클래스는 단 하나만 있어야 하며, 나머지 클래스들은 public 키워드 없이 정의해야 합니다. 예를 들어:

    public class MyApp {
        public static void main(String[] args) {
            System.out.println("Hello from MyApp");
        }
    }

    class AnotherClass {
        public void sayHello() {
            System.out.println("Hello from AnotherClass");
        }
    }

    여기서는 MyApp이 public 클래스로 정의되어 있고, AnotherClass는 public이 아니므로 같은 파일에 둘 수 있습니다. 또한, AnotherClass는 main 메소드를 가지고 있지 않기 때문에 프로그램 실행 시 MyApp의 main 메소드가 실행됩니다.

4. 여러 main 메소드가 있는 경우

  • 여러 main 메소드를 포함한 클래스가 같은 프로젝트에 있을 수 있습니다. 하지만 그 경우 실행하려는 클래스 파일을 명확히 지정해야 합니다.
  • 예를 들어, 다음과 같은 두 클래스가 있다면:

    public class MyApp {
        public static void main(String[] args) {
            System.out.println("Hello from MyApp");
        }
    }

    class AnotherClass {
        public static void main(String[] args) {
            System.out.println("Hello from AnotherClass");
        }
    }

    이 경우 파일에는 MyApp 클래스가 public이므로 파일 이름은 MyApp.java가 되어야 하며, 두 클래스 모두 main 메소드를 가질 수 있습니다. 하지만 실행할 때는 MyApp 클래스를 실행할지 AnotherClass의 main을 실행할지를 명확히 지정해야 합니다.
  • 예를 들어 javac MyApp.java로 컴파일한 후:
    • java MyApp을 실행하면 MyApp 클래스의 main 메소드가 실행되고,
    • java AnotherClass로 실행하려면 AnotherClass가 public 클래스가 아니기 때문에, 파일 이름과 일치하지 않으므로 AnotherClass는 직접 실행할 수 없습니다.

요약

  1. 하나의 Java 파일에는 하나의 public class만 있을 수 있으며, 그 public class의 이름은 파일 이름과 동일해야 합니다.
  2. public class 안에는 하나의 main 메소드만 존재해야 합니다.
  3. 하나의 파일에 여러 개의 클래스가 존재할 수 있지만, 그 중 오직 하나만 public class여야 하며 나머지는 public이 아닌 클래스일 수 있습니다.

혹시 더 궁금한 점이나 추가적인 예시가 필요하면 알려주세요!



Q3.
즉, 하나의 자바 파일 안에는 public 클래스는 하나만 있을 수 있고, 그 public 클래스 안에는 main 메소드는 하나만 있어야 하는데, 그 외의 public 클래스가 아닌 클래스들에는 여러 main 메소드가 있을 수 있다는 거야?


 

네, 정확하게 이해하셨습니다! 정리하면 다음과 같습니다.

1. 하나의 자바 파일에는 public class는 하나만 있어야 합니다.

  • 이 public class는 반드시 파일 이름과 같아야 합니다. 예를 들어, MyApp.java 파일에는 public class MyApp이 있어야 합니다.
  • 여러 개의 public class를 같은 파일에 정의하는 것은 불가능합니다.

2. public class 안에는 main 메소드는 하나만 존재할 수 있습니다.

  • main 메소드는 프로그램 실행의 진입점이므로, 하나의 클래스 안에 여러 개의 main 메소드를 정의할 수 없습니다. 즉, 하나의 public class 안에는 오직 하나의 main 메소드만 있을 수 있습니다.

3. public class가 아닌 클래스들은 여러 개 정의될 수 있습니다.

  • public이 아닌 클래스들은 하나의 파일에 여러 개 정의될 수 있습니다. 이 클래스들은 반드시 public일 필요가 없으며, 하나의 파일에 여러 개 존재할 수 있습니다.

4. public class가 아닌 클래스들에도 main 메소드를 정의할 수 있습니다.

  • public이 아닌 클래스에도 main 메소드를 정의할 수 있지만, 이 클래스들은 직접 실행할 수 없습니다.
  • 여러 main 메소드가 존재할 수 있고, 이 경우 각각의 main 메소드는 클래스 내부에 독립적으로 존재하지만, JVM은 기본적으로 public class에 있는 main 메소드를 먼저 실행합니다.
  • 이 main 메소드를 실행하려면 별도의 방법으로 실행하거나, 다른 클래스에서 호출해야 할 수 있습니다.

예시

public class MyApp {
    public static void main(String[] args) {
        System.out.println("Hello from MyApp");
    }
}

class AnotherClass {
    public static void main(String[] args) {
        System.out.println("Hello from AnotherClass");
    }
}

class YetAnotherClass {
    public static void main(String[] args) {
        System.out.println("Hello from YetAnotherClass");
    }
}

  1. MyApp 클래스는 public이므로 이 파일의 이름은 MyApp.java이어야 합니다.
  2. **AnotherClass**와 **YetAnotherClass**는 public이 아니므로 이 파일 내에서 존재할 수 있습니다.
  3. 이 파일을 컴파일한 후에 기본적으로 MyApp 클래스의 main 메소드가 실행됩니다.
    • java MyApp 명령어로 실행하면 MyApp의 main이 실행됩니다.
    • AnotherClass나 YetAnotherClass의 main 메소드를 실행하려면 다른 클래스에서 호출하거나, 특정 환경에서 실행할 수 있습니다.

결론적으로, 하나의 파일에 여러 main 메소드를 포함할 수는 있지만, 그중 실행되는 main 메소드는 JVM이 진입점으로 선택한 public class의 main 메소드입니다.