부스트코스에 있는 웹 풀스택 수강을 위해서 HTML + CSS + JS 찍먹

그리고 오늘 자바 찍먹을 시작했다.

(생활코딩은 신이다)

 

JAVA만큼은 VScode보다는 IntelliJ가 더 실무에서 많이 사용된다고 들어서,

이클립스 대신에 인텔리제이를 바로 설치하고 가장 기초적인 헬로 월드부터 차근차근 해보고 있었다.

 

그런데.. 주구장창 'public static void main'을 적어대는 것이 아닌가?

뭔가 마법을 시전하는데에 들어가는 기본 문구같은 느낌이었다.


Just 쉿. 그런거 알 필요 하~나도 없어요. 내 말 뭔지 알아요?

하지만 '그것이 중요한게 아니다'로 강의는 진행됐다.

그리고 궁금해서 찾아봤다.

 

*주의*

초보자 시점에서 쓴 글이라 내용이 엄밀하지 않을 수 있습니다.


신뢰도가 급상승하는 썸네일과 제목이다. (링크)

 

"public static void main 이라는 일종의 구문은,

JRE(Java Runtime Environment - 대충 실행해주는 애)가  arg(argument, 인자)에 따라,

MainMethodExplanation.main(args)라는 메소드(main)를 찾아서 실행하게 설정하는 것이다."


1. 왜 public인가?

만약 public이 아니라 private이나, 보호되어있다면 JRE가 실행할 권한이 없다.

(private - protected - public 순으로 보호된다고 한다)

 

즉, public으로 안 쓰면 실행이 안 된다. (내가 이해한 바로는)

public static void main 중에서 public을 빼면 다음과 같이 나타난다(인텔리제이 기준)


2. 왜 static인가?

class를 실행하는 데에 있어서, instance를 설정해주지 않고도 실행할 수 있게끔 하기 위해서.

("Static method is a method that can be called on a class without needing an instance of that class to run")

즉, 객체를 직접 지정해가면서 실행할 게 아니라 그냥 있는 그대로 코드를 써서 실행하기 위함이다.

사진처럼 explanation을 객체로 만들어주고 메소드를 사용할 필요가 없다 - 바로 쓰면 된다.

이게 머선 소리고!


찾아보니까,

static은 전역변수프로그램 시작과 동시에 호출이 되어서 종료까지 살아있다고 한다.

계속 써먹는 main 메소드가 폐기되는 일이 없도록 해주는 것이라고 한다.


(출처 - https://coding-factory.tistory.com/524)

(필드 == 객체의 데이터가 저장되는 곳 == 변수선언)

(클래스는 인스턴스의 집합)

 

즉, number1과 number2를 Number라는 클래스에 인스턴스로 지정해준 다음,

number1.num++; 를 해주면 Number 클래스의 num의 값이 1 증가 (모든 인스턴스에게 적용)

number1.num2++;를 해주면 Number1이 갖고 있는 num2의 값이 1 증가 (number1에게만 적용)

그렇게 해서 밑의 두 프린트문을 출력하면,

1

0

으로 나올 것이다.


 

(출처 - https://coding-factory.tistory.com/524)

즉, 전역변수로 컴파일과 동시에 정의되고,

안 건드려도(인스턴스로 안 만들어줘도)  - static

호출이 가능하게끔 하기 위해서 static을 쓰는 것이다.


3. 왜 void인가?

이건 어느 정도 감이 온다.

이전에 네이버 부스트캠프 평가문제에서 종종 봤었는데 (C언어 ^^),

프로그램이 리턴해주는 값이 있냐 없냐에 대한 얘기다.

실행해서, main 메소드 찾아서, 안에 코드들 실행하고, 종료한다. 그런데 이제 리턴 값은 없는.

 

프린트로 출력을 하니까 뭔가 산출하는게 있는 것 처럼 보이지만 그냥 그 출력 자체만 하는 것이다.

만약에 다른 소스코드에서 void라고 써놓은 메소드를 써서 그 값을 쓰려고 보면 None이 찍힐 것이다. (리턴 값이 없으니)


4. 왜 main인가?

별 다를 이유가 있을까? 그냥 메인이니까 메인이지.

main으로 쓰기로 약속했으니 main으로 쓰는 것이라고 한다.

즉, 머리가 되는 이름이다.


5. 왜 (String[] args) 인가?

이 부분은 해당 프로그램을 실행할 때 설정되는 인자(arguments)를 얘기해주는 것이다.

파이썬과 자바가 확실히 다른 포인트인 것 같다.

인터프리터와 컴파일러 언어의 차이인가? 해서 찾아보았다.

 

음.. 그냥 컴파일된 class에 파일 외적으로 미리 할당해주는 그런 느낌인 것 같다.

(IntelliJ) 파일을 우클릭하면 나오는 실행 구성 수정에서 args를 입력할 수 있다. 

 

a라는 정수형 변수에 문자열 인자인 "20220630"을 정수형으로 변환해서 할당한다.

위의 코드를 출력하면 다음과 같이 나온다.


즉, 문자열로 이루어진 배열(String[])의 이름이 'args'인 것이고, 그 인자들을 실행할 때 미리 정해줄 수 있는 것이다.


자바.. 쉽지 않은 것 같은데

확실히 "일단 짜고나면 안정적이다"라고 말한 이유를 조금이나마 느낀 것 같다.

파이썬이 자유로운 연애였다면 자바는 집착이 심한 연애같다.

 

하지만 이런 집착?

오히려 좋아~

 

복사했습니다!