1. Basic Syntax
메인 메서드(기본 메서드)
JVM은 런타임 정도로 일단 생각하자. 예를 들어, 당신이 JS 개발자라면 런타임은 Node.js나 웹 브라우저가 있을 것이고, C#은 아마도 닷넷 정도로 생각해보자. 다음에 제대로 다루어 보겠다.
TECHIE DELIGHT에서 가져온 내용입니다.
JVM(Java Virtual Machine)은 지정된 클래스의 메인 메서드를 호출하여 실행하고 main() 이후 프로그램에 필요한 다른 모든 메서드를 호출한다.
public class TestProject {
public static void main(String[] args){
//...
}
}
여담으로 일반적으로 매개변수(Parameter)는 함수를 정의할 때 사용되는 변수를 매개변수, 실제 함수를 호출할 때 전달하는 변수를 인자(Argument)라고 한다.
아래 두 개의 질문을 이해하면 자바의 진입점에 대한 어느 정도 이해도를 가져갈 수 있다.
1. 자바에서 메인 메서드가 정적(static)으로 선언된 이유는 무엇일까?
2. 자바에서 메인 메서드가 공개(public)된 이유는 무엇인가?
메인 메서드가 정적(static)인 이유
메인 메서드는 자바에서 정적이기 때문에 JVM은 클래스의 개체를 인스턴스화하지 않고 직접 호출할 수 있다. 만약 메인 메서드가 정적이지 않는다면 JVM은 클래스의 인스턴스를 생성해야 하며, 해당 클래스의 생성자가 인자(argument)를 취해야 하는 모호성이 발생한다. JVM에서 어떤 생성자를 호출해야 하고 어떤 매개변수(parameter)를 전달해야 하는지 모르기 때문에 인스턴스화하기 어렵다. 클래스의 기본 생성자에 동의하여 인스턴스를 생성할 수 있지만 오버헤드이다. 자바는 이미 있는 것보다 덜 장황하게 하기 위해 메인 메서드는 자바에서 정적(static)이다.
메인 메서드가 공개(public)된 이유
우리는 public 접근 제어자가 있는 메서드에 접근하고 호출할 수 있다는 건 알고 있다. 메인 메서드는 JVM에 의해 호출되어야 하기 때문에 자바에서는 공개되어 있다. 만약 메인 메서드가 공개되지 않는다면 JVM이 호출하지 않는다.
자바의 기본 구문
1. 자바 프로그램은 객체들의 집합이며, 객체들은 서로 메서드의 호출을 통해 통신하며 함께 작동한다.
- 클래스 : 인스턴스와 관련된 데이터 및 동작을 설명하는 템플릿 (클래스 인스턴스의 청사진)
- 객체 : 행동과 상태가 있는 클래스의 인스턴스
- 메서드: 객체의 행위
- 인스턴스 변수: 모든 객체에는 고유한 인스턴스 변수 집합이 있다. 객체의 상태는 일반적으로 이러한 인스턴스 변수에 할당된 값에 의해 생성된다.
2. 소스 파일 규칙
공개 클래스 파일의 이름은 소스 파일의 이름과 정확하게 일치해야 한다. 만약 공개 클래스가 없는 경우 파일 이름은 다른 이름일 수도 있다. 공개 클래스 GFG가 있다고 했을 때 다음과 같다.
GFG.java // good
gfg.java // not working!
그럼 다음과 같은 의문이 생길 수 있다. "공개 클래스가 여러 개인 파일은 어떻게 하누..?" 결과부터 말하자면 그럴 경우는 없다. 공개 클래스 제약으로 한 파일에는 공개 클래스가 하나밖에 없다.
왜 이런 제약이 있는지 검색을 해봤는데 결론을 도출할 수는 없었고 대신 식견을 넓힐 수 있었다.
3. 기타 명명 규칙
관례에 대한 이야기이다. 자바는 대소문자를 구분하는 언어임을 기억하고, 클래스의 첫 글자는 대문자로 시작을 권장. 다른 언어와 같이 예약어는 사용할 수 없다. 또한 메서드와는 소문자로 시작하는 것을 권장한다. 카멜 케이스를 권장하는 것 같다.
2. DataStructures
모든 언어가 그렇듯 프로그래밍에서 자료구조는 중요하다. 문제를 해결하기 위해 특정 알고리즘을 적용하거나, 데이터를 효율적으로 저장하기 위해서 여러 자료구조에 대한 이해도는 필수적이다. 컬렉션 프레임워크를 통해서 구현하거나, 직접 클래스로 정의할 수 있다. 이 파트에 대해서 자바로 구현하는 방법은 다루지 않고 분류만 다루겠다.
평소에 알고리즘 문제를 해결할 때, 나는 자바스크립트를 사용한다. 자바스크립트 특성상 직접 자료구조를 구현해야 해서 연습을 많이 했다. 그러므로 자바로 구현하는 방법을 따로 찾아보진 않았다.
- 선형 자료구조(Linear Data structure) : 데이터 요소가 순차적 또는 선형으로 배열되고 각 요소가 이전, 다음 인접 요소에 연결된 데이터 구조
- 정적 데이터 구조(Static Data structure) : 메모리 크기가 고정되어, 액세스가 쉽다는 특징이 있다.
- 동적 데이터 구조(Dynamic Data structure) : 메모리 크기가 고정되어 있지 않고, 공간 복잡성과 관련하여 효율적이라 생각될 수 있는 런타임 중에 무작위로 업데이트될 수 있다.
- 비선형 자료구조(Non-linear Data structure) : 데이터 요소가 순차적 또는 선형으로 배치되지 않은 데이터 구조, 트리, 그래프 등이 있다.
더욱 자세한 자습서가 필요하다면 What are Data Structures? 와 Data Structure and Algorithms 를 참고
'개발(레거시) > 자바' 카테고리의 다른 글
String, String Buffer, String Builder (0) | 2022.11.12 |
---|---|
Generic, Variance (1) | 2022.10.31 |
DataTypes, Type conversion, Type of variables (0) | 2022.10.30 |