춤추는 개발자

[객체지향] Java를 Java스럽게 본문

Developer's_til/그외 개발 공부

[객체지향] Java를 Java스럽게

Heon_9u 2020. 10. 28. 16:53
728x90
반응형
class Solution {
    public int solution(int n) {
        int answer = 0;
        return answer;
    }
}

프로그래머스를 자주 이용하는 분들이라면 위 코드가 무엇인지 알 것이다. 알고리즘 문제에 들어가서 언어를 Java로 선택하면 나오는 기본 템플릿이다.

 

 평소에는 solution함수에 로직을 작성하고 모듈별로 메소드를 만들어서 풀이했는데, 이제는 좀 더 Java스럽게 문제를 풀고 있다.

class Solution {
    public static int solution(int n) {
        int answer = 0;
        return answer;
    }
    
    public static void main(String[] args) {
    	int n = 0;
    	solution(n);
    }
}

 

 무슨 차이가 있는가? 바로 main함수다. Java에서 main메서드를 생성하는 이유는 특별한 기술적인 이유는 없다고 한다. 다만, 'Java소스는 무조건 main함수에서부터 시작된다!' 라는 Java의 규칙을 받아들이면 됩니다.

 

 실제로 IT기업의 기술 면접에서 코딩테스트를 main함수없이 풀이했다가 한소리 들었습니다. 문제만 풀때는 굳이 신경쓰지 않았던 부분이지만 기업처럼 많은 사람이 모여서 개발하는 환경에서는 정말 중요한 규칙이구나를 느낄 수 있었습니다.

 

 

그렇다면, 왜 main함수 앞에 public과 static이 붙는지 궁금할 것입니다.

 static키워드는 정적 메소드 또는 정적 변수를 만들어 객체를 생성하지 않아도 프로그램 실행 시, 자동으로 메모리에 적재되는 특징이 있습니다. 즉, main함수는 객체 생성없이 자동으로 실행되어 작업을 수행해야하기 때문에 static으로 선언하는 것입니다.

 이와 비슷하게, 접근 제어자인 public은 JVM이 main함수가 어디에 있든(package와 class구분없이) 접근 가능해야하기 때문에 사용하는 것입니다.

 

 마지막으로, main함수에 String[] args라는 인자를 넣어주는 이유는 매개변수로 문자열 배열을 줄 수 있다는 것을 의미합니다. 이는 Java를 커맨드라인(cmd)에서 실행할 때 매개변수를 지원해주기 때문에 기본으로 사용하고 있습니다. 예를 들어, 커맨드라인에서 java test.class 뒤에 문자열을 적어서 java test.class HelloJava라고 실행할 수 있는 것입니다.

 

 

(추가)

 main함수의 리턴값이 void인 이유는 main함수 종료는 프로그램의 종료를 의미하기 때문에 리턴값이 있을 필요가 없습니다.

728x90
반응형