자바 코드의 기초
- 자바의 모든 프로그램은 public static void main(String[] args)함수로 시작한다.
public
- 제한자 부분으로, 모든 함수의 앞에는 이 함수를 어디에서 접근할 수 있는지 범위를 지정할 수 있다. 제한자는 public, private, protected 종류를 지정할 수 있지만 main 함수만은 public 을 지정해야 한다.
- 왜?
main 함수는 모든 실행 프로그램의 기본이 되는 함수여야 한다. 기본이 되는 함수이기 때문에 어디에서나 접근이 가능해야 한다. private 는 해당 클래스에서만 접근이 가능하고 protected는 같은 패키지 내에서만 접근이 가능하다. main 함수의 제한자가 public이 아니라면 main 함수에 접근하지 못하는 클래스가 있을 수 있고 이런 경우가 발생하면 안되기 때문에 public으로 선언되어야 한다.
- public : 모든 곳에서 접근 가능
- private : 자기 자신 클래스에서만 접근 가능
- protected : 자기 자신 클래스와 상속된 클래스에서 접근 가능
ststic
- 자바는 변수나 함수를 메모리에 할당하는 방법이 2가지 있다. 첫번째는 static 영역에 선언하는 것이고 다른 하나는 heap 영역에 선언하는 것이다.
1. static
메모리 할당 기준 : 프로그램 실행되는 순간
메모리 정리 기준 : 정리 대상 아님
- heap
메모리 할당 기준 : 연산이 실행되는 순간
메모리 정리 기준 : Garbage Collecto에 의해 정리- main 메소드가 heap 영역에 선언되면 어떻게 될까?
main 메소드는 프로그램에 없어서는 안되는 기본 함수이다.
이 함수가 Garbage Collector에 의해서 정리되면 안된다.
따라서 static으로 선언하여 메모리에 항상 상주하도록 설정한다.
void
- void는 "함수가 끝날 때 리턴값이 없다" 라는 의미이다. 일반 함수는 void를 사용해도 되고 int, char 등 다른 타입을 사용해도 문제 없이 동작한다. 그런데 왜 main 함수만 void여야 할까?
이유는 main 함수가 종료되면 프로그램이 종료되기 때문이다.
반면, 일반함수의 경우 정상적 혹은 비정상적인 경우 리턴값을 변수에 담아 다음 단계를 진행할 수 있다. 그래서 main 함수는 void를 의무적으로 사용해야 하고 return 값을 가지기 위해 void 대신 다른 타입을 사용하는 경우 에러가 발생한다.
main
- main은 그냥 이름이라고 생각해야겠다.
String[] args
- args 문자열을 배열로 사용하겠다는 의미이다.
- 모든 함수는 매개변수를 사용할수도 있고 사용하지 않을수도 있다. 이는 main 함수도 마찬가지이다. 그러나 일반 함수는 메인함수 내부에서 호출하기 때문에 입력값을 적어도 main 함수 안에서 정할 수 있다. 그러나 main함수는 프로그램 실행 시 처음으로 수행되는 함수이기 때문에 외부로부터 값을 입력받을 수 있어야 한다. 프로그램 내부에서 값을 호출할수가 없으며 이렇기 때문에 항상 문자열 인자를 받게 된다.