ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 자바의 Hello World
    Java 2021. 10. 29. 03:02
    728x90

    개요

    자바에서 기본적으로 제공해주는 public static void main 구문에 대한 궁금증이 생겨 왜 그렇게 사용하는지 알아보고자 합니다.

     

    자바 Public Class와 소스파일 네이밍

    class Hello {
    	public static void main(String[] args) {
    		System.out.println("Hello, world.");
    	}
    }

    위는 Java를 사용하여 Hello, world. 를 출력하는 코드입니다.

     

    자바에서 모든 코드는 반드시 클래스 안에 존재해야 하며, 이 클래스들이 모여 하나의 Java 애플리케이션을 이룹니다.

     

    하나의 소스파일에 하나의 클래스만을 정의하는 것이 보통이지만, 하나의 소스파일에 둘 이상의 클래스를 정의하는 것도 가능합니다.

     

    이때 주의해야 할 점은 '소스파일의 이름은 public class의 이름과 일치해야 한다'는 것입니다.

    만약 소스파일 내 public class가 없다면, 소스파일의 이름은 소스파일 내의 어떤 클래스의 이름으로 해도 상관없습니다.

     

    또한 소스파일에 둘 이상의 public class가 존재하면 안 됩니다.

     

    왜 public class의 이름과 소스파일의 이름이 같아야 할까?

    여러 개의 클래스를 작성하는 경우에는 하나의 대표 클래스를 지정하고 파일명의 동일하게 하는 것이 코드의 가독성에 도움이 된다고 하여 파일명과 public 클래스의 이름이 같아야 한다는 규칙이 생겼다고 합니다.

     

    왜 public class는 2개 이상이면 안될까?

    이 규칙 또한  프로젝트가 조금만 커져도 어느 클래스가 어느 파일에 있는지 찾기가 엄청 힘들어져서 가독성 때문이라고 합니다.


    여기서 public static void main(String [] args)는 무엇을 의미하는 걸까?

    public부터 보면 이는 접근제어자인데 접근제어자는 public, pretected, private, (default) 4가지로 구성되어 클래스, 메서드, 변수, 필드의 앞에 붙어서 선언이 가능합니다.

     

    public은 어디서나 상속 및 참고가 가능하고, protected는 같은 패키지 내부 혹은 이 클래스를 상속한 클래스에서만 접근을 허용하며, private는 오직 이 클래스를 포함하고 있는 클래스 내부에서만 상속 및 참조를 허용한다는 의미이고 , (default)는 같은 패키지 내에서만 상속 및 참조가 가능하다는 의미입니다.

     

    다음은 static입니다. 기본적으로 우리가 변수를 선언하면 특정 부분에서만 사용 가능한 local의 의미를 가지는데 static은 그럼 범위를 벗어나 다른 곳들에서도 사용할 수 있다는 의미로 사용됩니다. static은 프로그램의 생성과 동시에 그 값이 선언이 되어 이미 메모리에 상주를 하게 됩니다.

     

    다음은 void입니다. 메서드에서 최종적으로 특정한 return 값이 없을 경우에 사용하는 명령어입니다.

    예를 들어 계산한 특정값을 반환하는 메서드를 만들면 int, double, string 같은 타입을 선언하여 return 하여야 하고 계산을 하고 출력까지 하는 메서드를 만들면 반환해야 하는 값이 없으니 void를 사용합니다.

     

    그러면 public static void main(String [] args)는 무엇일까?

    우선 Java에서 애플리케이션은 main의 호출로 시작해서 main의 수행이 끝나게 되면 종료됩니다.

     

    main을 실행하는 데 있어서 다른 클래스 메소드 등을 호출해서 사용해야 하는데 main 자체가 다른 곳에서 접근을 허용하지 않는다면 문제가 생길 수 있어 public으로 지정해 줍니다.

     

    프로그램의 시작과 끝을 함께하는 main메서드가 일정 시간만 살아있고 폐기되면 곤란하므로 static 명령어가 필요합니다.

     

    void의 경우는 return값이 없다는 것인데 main에서 void를 사용하는 것은 프로그램이 종료되는 시점에서 어떤 값이 반환된다 한들 그 값이 의미를 가질 리도 없고, 의미를 가져서도 안 됩니다.

     

    마지막으로 String [] args는 맨 처음 프로그램을 실행하는 데 있어 외부에서 값을 받아오기 위해서 사용하는데 args의 경우 변수명이기 때문에 다른 값으로 대체해도 되나 string [] args 구문 자체를 뺄 수는 없습니다.

     

    왜 string [] args는 매개변수인데 빼면 안 될까요?

    모든 함수는 매개변수를 사용할 수 있고 않을 수도 있습니다.

    일반 함수는 메인 함수 내부에서 호출하기 때문에 입력값을 main 함수 안에서 정할 수 있습니다.

    하지만 main 함수는 프로그램 실행 시 처음으로 수행되는 함수여서 외부로부터 값을 입력받을 수 있어야 합니다.

     

    프로그램 내부에서 값을 호출할 수가 없으며, 이렇기 때문에 항상 문자열 인자를 받게 됩니다.

    예를 들어 Example01.class라는 클래스를 생성하고 실행한다면 java Example01.class라는 명령어를 통해 실행되는데 java Example01.class 100 200 이런 식으로 특정한 값을 입력하고자 했을 때 args [0], args [1]에 100, 200이라는 값이 저장되어 프로그램 안에서 사용할 수 있습니다.

     

    출처

    https://cbw1030.tistory.com/39

     

    [JAVA] public class & class 차이

    Program.java 라는 이름을 가진 클래스 파일로 예시를 들어보자. Program.java class Program { } 문제없이 컴파일이 잘 된다. 위 소스 파일에 아래와 같은 클래스를 하나 더 추가해보자. class Program { { clas..

    cbw1030.tistory.com

    https://blog.naver.com/crazydeicide/130114957734

     

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

    처음 Java 공부를 시작 할 때 늘, 언제나, 항상, 무조건, 이 문장을 집어 넣어야 한다기에 무작정 따라 외...

    blog.naver.com

    Java의 정석 3rd Edition(남궁성 지음)

    댓글

Designed by Tistory.