JAVA

public static void main(String[] args) 무슨 의미지?

서윤-정 2023. 8. 10. 00:06

 

 

✔️ public static void main(String[] args)

 

자바 프로그램의 실행 진입점(entry point)을 정의하는 메서드이다.

이 메서드는 프로그램이 실행될 때 자동으로 호출되며, 프로그램의 시작점을 나타낸다.

이 메인 메소드는 자바 어플리케이션 실행 시 제일 먼저 동작하며 어느 객체에서든 접근할 수 있으며

자바가 컴파일 되는 순간 정의되는 돌려주는 값이 없는 함수인 것!

 public static void main(String[] args) 단 한개만 엔트리 포인트로 정의했기 때문에 

오버로딩 된 다른 형태의 main 함수는 엔트리 포인트로 동작하지 않는다.

 

 

 

• public

main 메서드가 다른 클래스에서도 접근 가능하도록 공개되어 있다는 의미이다.

접근제어자는 외부에서 접근할 수 있는 일종의 제약이다.

종류는 제약이 강한 순서대로

 

private(자기 자신 클래스에서만 접근 가능)

-> protected(자기 자신 클래스와 상속된 클래스에서 접근 가능)

-> public(모든 곳에서 접근 가능)

 

이 있으며 default는 클래스 내부와 동일 패키지에서 접근할 수 있다.

public 은 어느 곳에서든 해당 객체를 참조할 수 있다는 의미이다.

 

public, static 서로의 순서는 바꿔도 상관은 없다.

 

 

 

 

• static

main 메서드가 객체의 생성 없이도 호출될 수 있도록 정적 메서드로 정의되었다는 의미이다.

만약, static이 없이 메인 메서드의 객체를 만들어야 한다면, 생성자 때문에 까다로울 것이다.

메인 메서드가 포함된 클래스의 생성자에 제대로 된 인자값을 넣어주지 못한다면, 

객체 만드는 것에 실패하고 메인 메서드를 호출하지 못하기 때문이다.

 

 

 

• void

main 메서드가 반환값이 없음을 나타낸다. 

즉, 아무런 값을 반환하지 않는다.

일반함수는 void를 사용해도 되고 int, char 등 다른 타입을 사용해도 문제없이 작동하는데

왜 main 함수만 void이어야 할까?

main 함수가 종료되면(혹은 비정상적으로 죽으면) 프로그램이 종료된다.

프로그램 자체가 종료되기 때문에, return 값의 의미를 지닐 수 없다.

반면, 일반함수의 경우 정상적 혹은 비정상적인 경우 리턴값을 변수에 담아 다음 단계를 진행할 수 있다.

그래서 main 함수는 void를 의무적으로 사용해야 하고 return 값을 가지기 위해 

void 대신 다른 타입을 사용하는 경우 에러가 발생한다.

 

 

 

 

 

• main 

메서드의 이름이다.

이 이름은 변경할 수 없으며, 자바 가상 머신(JVM)이 프로그램을 실행할 때 찾는 진입점이다.

 

 

 

 

 

• (String[] args) 

main 메서드의 매개변수로 문자열 배열 args 를 받는다.

args 문자열을 배열로 사용하겠다는 의미이다.

String 객체로 정의된 args 라는 이름의 배열로 파라미터를 받겠다..

이 배열은 프로그램을 실행할 때 커맨드 라인에서 전달되는 인수들을 담고 있다.

엔트리 포인트(Entry Point)이다. (프로그램이 시작되는 시작점)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

➕ 커맨드 라인(Command Line)

컴퓨터 사용자가 명령어를 입력하고 실행하는 환경을 말한다.

일반적으로 터미널 또는 명령 프롬프트라고 한다.

이 환경에서 사용자는 텍스트 명령어를 입력하여 주로 시스템 관리, 파일 조작, 프로그램 실행 등

다양한 작업을 수행할 때 사용된다.

 

 

 

➕ 파라미터(Parmeter)

함수나 메서드에 전달되는 값을 의미한다.

함수 또는 메서드를 호출할 때, 그 함수가 필요로 하는 입력 값을 전달하기 위해 파라미터를 사용한다.

 

파라미터는 함수나 메서드의 정의 부분에서 선언되며, 함수 내부에서 사용될 수 있다.

public class ParameterExample {
    // 함수 정의: 두 정수를 더하는 함수
    public static int add(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
        int x = 5;
        int y = 10;

        // 함수 호출: add 함수에 파라미터로 x와 y를 전달하고 결과를 result에 저장
        int result = add(x, y);

        System.out.println("Result: " + result); // Output: Result: 15
    }
}

위 예제에서 add 함수는 두 개의 파라미터 a와 b를 가지고 있다.

이 함수는 두 파라미터의 값을 더해서 반환한다.

main 함수에서 add 함수를 호출할 때, x와 y라는 실제 값이 a와 b 파라미터에 전달된다.

함수 내부에서는 이 파라미터 값을 이용하여 계산을 수행하고 결과를 반환한다.

 

파라미터를 사용함으로써 함수나 메서드는 더 일반화된 작업을 수행하도록 설계할 수 있으며,

여러 곳에서 재사용할 수 있는 유연한 코드를 작성할 수 있다.

 

 

 

 

 

➕ 자바 가상 머신(Java Virtual Machine, JVM)

자바 프로그램을 실행하기 위한 가상 컴퓨터 환경을 제공하는 프로그램이다.

자바 프로그램은 컴파일되어 바로 실행되는 것이 아니라,

먼저 중간 형태인 바이트 코드(Bytecode)로 변환된 후에 JVM에서 실행된다.

 

JVM은 자바 프로그램을 운영체제나 하드웨어와 분리하여 독립적인 환경에서 실행할 수 있게 해준다.

이로써 여러 운영체제에서 동일한 자바 프로그램을 실행할 수 있고, 이식성(portability)이 보장된다.

 

JVM의 주요 역할은 다음과 같다.

 

1. 바이트 코드 해석 : 자바 컴파일러에 의해 생성된 바이트 코드를 읽어들여 실행 가능한 기계어로 변환하고 실행한다.

2. 메모리 관리 : JVM은 자동으로 메모리를 관리하며, 객체의 생성과 소멸, 가비지 컬렉션(Garbage Collection) 등을

수행하여 프로그래머가 직접 메모리를 관리하지 않아도 된다.

3. 스레드 관리 : JVM은 멀티스레드를 지원하고 스레드 스케줄링을 담당하여 여러 작업을 동시에 실행할 수 있게 한다.

4. 클래스 로딩 : 프로그램이 실행될 때 필요한 클래스들을 동적으로 로딩하고 링크한다.

5. 예외 처리 : 프로그램 실행 중 발생하는 예외를 처리하여 안정성을 높인다.

6. JIT 컴파일 : 일부 JVM은 Just-In-Time 컴파일러를 통해 바이트 코드를

더 빠른 기계어로 변환하여 실행 성능을 향상시킨다.

 

자바의 큰 장점 중 하나는 JVM을 통해 여러 플랫폼에서 동일한 코드를 실행할 수 있다는 점이다.

이를 통해 자바는 이식성이 뛰어나며, 다양한 운영체제와 하드웨어에서 실행되는 소프트웨어를 개발할 수 있다.

 

 

 

 

 

➕ 스레드(Thread)

스레드는 프로세스 내에서 실행되는 작은 실행 단위이다.

하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 각각의 스레드는 독립적으로 실행되는 코드의 흐름을 나타낸다.

스레드는 프로세스 내의 자원을 공유하면서 동시에 다양한 작업을 수행할 수 있게 해준다.

 

스레드는 프로세스 내에서 동시에 실행되는 여러 개의 실행 단위로,

각각의 스레드는 프로세스의 주소 공간이나 자원을 공유하면서 개별적인 코드를 실행한다.

이로 인해 스레드 간의 통신과 데이터 공유가 간단해지며, 다양한 작업을 동시에 처리할 수 있게 된다.

 

스레드의 몇 가지 중요한 특성과 개념은 다음과 같다.

 

1. 멀티스레딩(Multithreading) : 하나의 프로세스 내에서 여러 개의 스레드가 동시에 실행되는 것을 말한다.

2. 동시성(Concurrency) : 여러 개의 스레드가 동시에 실행되지만, 실제로 동시에 실행되는 것처럼 보이도록

관리하는 개념이다.

여러 스레드가 번갈아 가며 실행되는 방식으로 동시성을 지원한다.

3. 병렬성(Parallenlism) : 여러 개의 스레드가 실제로 동시에 물리적으로 실행되는 것을 말한다.

병렬성을 통해 다중 코어 CPU에서 성능을 향상시킬 수 있다.

4. 스레드 스케줄링(Thread Scheduling) : 여러 스레드가 동시에 실행될 때, 스케줄러가

각 스레드에 CPU를 할당하는 방식을 관리한다.

5. 동기화(Synchronization) : 여러 스레드가 공유 자원에 동시에 접근할 때, 데이터 일관성을 유지하기 위해

스레드 간의 상호작용을 조율하는 메커니즘이다.

 

스레드는 복잡한 병렬 처리나 동시성을 필요로 하는 작업을 효율적으로 수행할 수 있는 방법 중에 하나이다.

그러나 스레드를 다룰 때 주의가 필요하며, 공유 자원에 대한 동기화 문제나 경쟁 상태(Race Condition) 등을

고려하여 프로그래밍 해야 한다.

 

 

 

스레드는 다양한 상황에서 사용될 수 있다.

아래는 몇 가지 스레드의 예시이다.

 

1. 다중 작업 처리 : 여러 작업을 동시에 처리해야 할 때 스레드를 사용할 수 있다.

예를 들어, 웹 서버에서 클라이언트 요청을 동시에 처리하거나, 파일을 동시에 다운로드 하는 등의 작업에 사용될 수 있다.

2. UI 업데이트 : 그래픽 사용자 인터페이스(GUI)에서는 사용자의 입력과 화면 업데이트를 별도의 스레드에서 

처리하여 프로그램이 응답성을 유지할 수 있다.

3. 병렬 계산 : 병렬 처리가 필요한 계산 작업을 스레드로 나누어 동시에 수행할 수 있다.

예를 들어, 이미지 처리, 데이터베이스 검색 등에서 병렬 스레드를 활용할 수 있다.

4. 네트워크 통신 : 네트워크 통신에서는 서버와 클라이언트 간의 데이터 송수신을 별도의 스레드에서 처리하여

다중 클라이언트 요청을 동시에 처리할 수 있다.

5. 백그라운드 작업 : 백그라운드에서 주기적으로 수행되어야 하는 작업을 스레드로 실행할 수 있다.

예를 들어, 자동 저장, 로그 기록 등이 있다.

6. 동기화 : 여러 스레드가 공유 자원에 접근할 때 동기화를 통해 데이터 일관성을 유지할 수 있다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

😊 참고

https://velog.io/@skyepodium/JAVA-%EB%A9%94%EC%9D%B8-%EB%A9%94%EC%86%8C%EB%93%9C-public-static-void-mainString-args-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

 

[JAVA] 메인 메소드 public static void main(String[] args) 알아보기

메인 메소드 public static void main(String[] args) 에 대해 알아봅시다.

velog.io

 

https://atomicliquors.tistory.com/7

 

[Java] public static void main(String[] args)는 무슨 뜻인가요?

요약 main함수는 자바 프로그램의 시작점이다. 자바가상머신(JVM)은 main이라는 이름을 가진 메서드를 찾아 프로그램을 시작한다. - public : JVM이 main함수를 찾을 수 있도록 한다. - static : JVM이 main함

atomicliquors.tistory.com

 

'JAVA' 카테고리의 다른 글

객체지향언어란?  (0) 2023.08.17
메서드(Method)란?  (0) 2023.08.17
접근 제어자란? (public, protected, default, private)  (0) 2023.08.17
형변환(casting) (자동 형변환, 강제 형변환)  (0) 2023.08.15
변수에 대해서  (0) 2023.08.11