스킬(skills)/자바(Java)

[java] main 메소드에 static 을 붙여야 하는 이유

후바스탱크 2016. 7. 1. 16:51

main에 왜 static을 붙이는가??

위 분들의 말씀처럼 static을 안 쓰면 에러가 나고, 당연히 실행이 안됩니다.

근데, 왜 일까요?

main에 static을 붙이는게 자바의 문법일까요??

다른 메소드들은 static을 써야하나요?? 아닌가요??

그렇다면 왜??

 

^^;;

제가 알고 있는 답은 이렇습니다. (컴퓨터 공학적으로..)

Static은 '정적'이라고 합니다. 그래서 '정적 변수', '정적 메소드' 뭐~ 이렇게 부르죠.

근데 Static의 기능은...

Static으로 지정한 것(변수나 메서드)을 메모리에 먼저 올리는 역활을 합니다.

다른 메소드들은 호출(call)될 때 메모리에 올라갑니다.. 그래서 그 메소드 호출이 끝나면 메모리에서 사라지져~ ^^

하지만, Static으로 지정한 것들은 메모리에 먼저 올라가서 프로그램에 종료될 때까지 사라지지 않습니다.

 

그럼, 다시 문제로 돌아와서... main에 Static을 쓰는 이유를 설명하겠습니다.

만약에 main에 Static을 쓰지 않는다면...

위에서 설명한 것처럼, main메소드도 누군가에게 호출되기 전에는 메모리에 올라가지 않습니다.

만약에 이렇게 된다면, 프로그램의 시작점인 main메소드가 먼저 실행되야 하는데, 메모리에는 없게 되고, 그렇게 되면 자바는 아무것도 실행 할 수 없게 됩니다. ㅜ.ㅜ

즉, 프로그램의 시작점인 main을 호출하기 위해서 메모리에 main메소드의 내용이 있어야 하는데, 이 main메소드는 누가 호출하기 전에 먼저 메모리에 있어야 하기 때문에 Static을 붙이게 되는 것입니다.

 

그럼, 이런 질문이 생깁니다.

"그렇다면, 모든 메소드와 변수들을 Static으로 지정하면 안되나?"

예.. 물론 안 되지 않습니다.

하지만, 이 말은 모든 메소드와 변수들을 메모리에 상주시키자는 의미이고, 그렇다면 메모리가 가득차게 될 것입니다.

그래서 프로그램이 조금만 커져도, memory overflow가 생기게 됩니다.

물론 메모리를 엄청나게 늘린 좋은 컴터를 사용하신다면 가능하겠지만, 일반적이지 않습니다.. ^^;;;

 

\\\\\\\\\\\\\\\\\\\\\\\\\\

 

객체 없이 바로 실행되는 것이기 때문에 static이 붙는 것.

객체를 생성할 때는 new명령을 쓰지만, 이런 명령없이 main함수는 바로 실행이 되기 때문.

ex)

String s; //뒤의 소스 생략...

Integer.parseInt(s);

// Integer.parseInt(s)명령을 바로 쓸 수 있는 것이 이 메쏘드가 static으로 선언이 되어 있기 때문.

 

그리고 자바는 문법이 딱딱 맞아야 되는 측면도 많지요~

예를 들면 C는 1,true를 조건문(while,if)에 같이 써도 상관이 없지만 자바는 조건문안에는 반드시 true를 써야지 됩니다~

그래서 자바의 메인 메소드도 딱딱 맞추어 써야 되는 특징이 있습니다...

 

\\\\\\\\\\\\\\\\\\\\\\\\\\

main 메소드는 반드시 static 을 붙어야 합니다.

 

일반 클래스의 메소드는 new 로 생성을 하죠.. 하지만 main 메소드를 실행하고자 하면

commond 창의 경우 클래스가 A일때 java A 하고 실행을 합니다.

 

A라는 클래스의 main 메소드를 호출하는데요.

클래스 이름으로 바로 호출할 수 있는 것이 static 메소드나 변수밖에 없습니다.

 

그러니 당연히 main method는 static 이어야 합니다.

클래스를 바로 호출하니까요..


[출처] -  'main메소드에서 왜 static을 붙어야하죠?' - 네이버 지식iN