일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- R
- 알기쉬운 알고리즘
- 윤성우 열혈자료구조
- Serialization
- 이스케이프 문자
- coding test
- Algorithm
- buffer
- 윤성우의 열혈 자료구조
- insertion sort
- 메모리구조
- s
- list 컬렉션
- Selection Sorting
- C 언어 코딩 도장
- Graph
- 혼자 공부하는 C언어
- C programming
- stream
- datastructure
- Stack
- JSON
- 이것이 자바다
- Today
- Total
Engineering Note
[Java] public static void main(String[] args)의 의미 본문
[Java] public static void main(String[] args)의 의미
Software Engineer Kim 2025. 6. 19. 14:42C언어, Python, Java를 배울 때 C언어가 어렵다는 말이 많은데 오히려 나는 Java가 초심자들에게는 배우기 가장 어려운 언어 같다. OOP라는 다소 철학적인 개념도 나오고 접근제어자 등 이해해야 할 개념이 많기 때문이다. 그 중에서 맨처음에 Hello World를 찍으면서 나중에 정리해야지 했던 개념을 다시 정리해보려고 한다. 그중에서 아래 개념은 Java를 처음 접하고 좌절을 안겨주었던 내용이다.
public static void main(String[] args)
public
public은 우선 접근제어자로 정보의 캡슐화 등을 위한 설정 키워드다. Java는 기본적으로 객체지향의 철학을 바탕에 둔 프로그래밍 언어라서 '프로그램세계는 객체들 간의 협력으로 이루어지고, 객체는 각자 역할과 책임을 다한다.'라는 철학 위해서 설계하도록 강제하고 있다. 그래서 기본적으로 각 객체는 서로 다른 객체의 내부정보를 접근할 수 없다. 객체는 협력적인 존재임과 동시에 독립적인 존재이기 때문이다. 이 개념이 바로 객체지향의 중요한 특징중 하나인 캡슐화를 구현하기 위한 방법이다.
public으로 설정하면 같은 클래스, 다른 클래스, 같은 패키지, 다른 패키지 등 어느 곳에서나 접근이 가능하다. main 메서드를 public으로 설정해야 하는 이유는 JVM이 접근가능해야하기 때문이다.
다른 접근 제어자로 private이 default, protected가 있다. private은 가장 제한을 많이 두는 형태의 접근제어자로 같은 클래스에서만 접근이 가능하다. 일반적인 필드에 설정한다. 그 다음 제약이 좁은 접근제어자는 default다. default는 아무 것도 안썼을 때 default로 작용하고 같은 패키지내의 다른 클래스까지 접근을 허용한다. 다른 패키지는 접근할 수 없다. 그다음 까다로운 조건인 protected가 있다. protected는 같은 패키지, 같은 패키지내 다른 클래스 그리고 다른 패키지 자식 클래스까지는 접근이 가능하다. 다른 패키지에 있는 상속관계가 없는 다른 클래스는 접근이 불가능하다. 상속 관계끼리는 접근하도록 protected로 설정하는 것이다.
(protected = default + 다른 패키지든 같은 패키지든 상관없이 상속관계에 있는 자식 클래스 접근 허용)
static
static은 인스턴스를 만들지 않고도 생성할 수 있어야 하는 변수나 메서드에 지정하는 키워드 인데, main 메서드는 프로그램이 시작되면 가장 처음 실행 되는 메서드로 클래스 생성 없이도 접근하고 사용할 수 있어야 하므로 static으로 설정한다. 이렇게 해야 JVM이 main메서드를 찾아서 실행할 수 있다.
void
void 메서드의 반환 값이 없다는 의미이다. main메서드를 호출 한 곳에 return 해줄 값이 없다는 의미로 설정한다.
String[] args
Stringp[] args는 main 메서드의 매개변수(arguments)로서 String[] 문자열 배열 타입을 의미하고 매개변수 명으로 args라는 뜻이다. args는 name등 다른 변수명으로 지어도 되지만 관례적으로 args로 한다. 그런데 이 매개변수가 왜 있는지가 가장 의문이여서 이 포스트를 작성하게 되었다.
IDE등 개발도구가 발달되지 않았을 시기에 아니, 발달은 커녕 없었을 시기에는 Java 프로그램을 만들면 에디터로 java 프로그램을 만들고 컴파일 하고 실행을 했는데 이때, 커맨드라인에서 값을 전달할 수 있었다. main 메서드도 메서드기 때문에 파라미터를 전달 받을 수 있는데 실행과 동시에 메서드에 파라미터를 전달 할 수 있었다는 거다. 콘솔라인에서 입력되는 값은 모두 문자열로 처리 되기 때문에 String[]으로 받아야 한다.
CLI로 main 메서드에 직접 매개변수 전달하기 실습
java 파일 만들기
Java 코드를 작성할 파일을 만들어준다. (touch HelloArgs.java)
touch HelloArgs.java
vi 에디터로 HelloArgs.java 파일을 열어준다. (vi HelloArgs.java)
vi HelloArgs.java
java 파일명과 동일한 이름으로 class를 만들어준다.
public class HelloArgs{
public static void main(String[] args){
if(args.length == 0){
System.out.println("args is not provided");
}else{
System.out.println("Arguments:");
for(String arg : args){
System.out.println(arg);
}
}
}
}
java 파일을 컴파일해서 class 파일로 만들어준다.
javac HelloArgs.java
ls 명령어로 확인하면 HelloArgs.class 파일이 만들어진걸 확인 할 수 있다.

파라미터 전달 HelloArgs 실행
java HelloArgs apple banana cherry

'Programming Language > Java' 카테고리의 다른 글
[Java] Array 초기화 메서드 fill() (0) | 2025.06.20 |
---|---|
[Java] javac 명령어를 사용해서 .java 파일 컴파일 하기 (3) | 2025.06.19 |
[Java] char 숫자 문자를 숫자로 변환하기(getNumericValue, 아스키 코드 활용) (2) | 2025.06.19 |
[Java] 자바의 문자열 공백 제거 및 공백 기준 문자열 나누기 (0) | 2025.06.18 |
[Java] 메모리 사용 영역 (0) | 2025.06.18 |