Language/Java

public static void main(String[] args)의 의미

Hoplin 2019. 2. 24. 19:15
반응형

자바에서 예시들을 보면 public static void main(String[] args)라고 되어있는 main()함수를 볼 수 있다. 근데 main()이라고만 쓰면 되지 public static은 왜 붙는 것인가? 우선적으로 말하자면 main()함수는 자바에서 꼭 public static 선언을 해주어야한다. 이의 근거는 다음과 같다. 우선적으로 main()함수의 호출은 클래스의 외부로부터의 호출을 받는다. 즉 이 점에서 public선언을 해준다. 그 다음 main()메소드는 인스턴스 생성전에 호출이된다. 이 점에서 static선언을 해준다.(static 선언 성질 -> 인스턴스 정의 전에 호출할 수 있다.)


1
2
3
4
5
6
7
8
9
10
11
class a {
    void b(){
        System.out.println("Hello");
    }
}
 
class c{
    void d() {
        System.out.println("World");
    }
}
cs

그럼 다음과 같은 두개의 클래스가 존재하는 코드가 있다고 가정하자. 이 코드에 main()함수를 넣어야 한다고 가정을 하면 어떻게 넣어야될까? 물론 클래스를 새롭게 생성해서 넣어줄 수 있다. 하지만 a나 c 클래스 안에 main()함수를 선언해 주어도 된다. 그 이유는 main()함수는 public static void main(String[] args)로 선언을 해주어야 한다. static선언에 의해 main()메소드는 어떠한 인스턴스에도 소속되어 있지 않다는 정의가 된다. 좀 더 쉽게 이해해보자면 a라는 클래스가 단지 main()메소드에게 '자리'를 주었다고 생각하면 된다.

형태 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class a {
    void b(){
        System.out.println("Hello");
    }
    public static void main(String[] args)
    {
        
    }
}
 
class c{
    void d() {
        System.out.println("World");
    }
}
cs

형태 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class a {
    void b(){
        System.out.println("Hello");
    }
}
 
class c{
    void d() {
        System.out.println("World");
    }
    public static void main(String[] args)
    {
        
    }
}
cs



반응형