package example;
public class Sample {
private final int answer;
public static void main(String[] args) {
System.out.println("Hello");
}
}
기본형 메인 함수로 구조를 살펴보면
패키지(Pakage): 클래스의 묶음 / 하나의 디렉토리라 볼 수 있다.
인스턴스(Instance): 생성된 객체를 의미한다. 구현된 객체라 표현하기도 한다. (ex. 만들어진 음식)
main: 프로젝트의 시작점
public: 접근 지정자, 외부에서 접근을 허용한다. 상속과 참조가 가능한 지정자이다.
static: 프로젝트 시작과 동시에 호출이 되며, 종료될 때 까지 유지하고 1번만 실행된다. 메인 함수들에 선언한다.
void: 리턴값이 없는 형식
String[] args: 연속적인 문자열 데이터가 들어가는 저장공간
메인 메서드에 명명된 static은 프로그래밍을 하면서 자동완성 기능으로 붙이든, 그 용도를 잘 모르고 사용하든 자주 접할 수 있는 키워드이다. 주로 인스턴스 변수나 메소드 앞에 선언했던 static에 대하여 정확히 알고 넘어가자
변수 종류는 크게 3가지로 나눌 수 있다.
클래스변수, 인스턴스변수, 지역변수로 세 종류가 있다.
변수의 종류를 결정짓는 중요한 요소는 변수의 선언된 위치이다.
클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어진다.
클래스 영역 안에 선언되었기 때문에 사용하려면 인스턴스를 생성해야 한다. 각 인스턴스마다 다른 값을 저장할 수 있다.
일반적으로 클래스를 만들면 해당 클래스의 인스턴스는 여러 개를 만들 수 있다. 보통 A라는 클래스가 있으면 A a = new A(); 이런 식으로
new 연산자를 이용해서 객체를 만든다. 이렇게 new를 이용할 경우엔 Heap 영역에 메모리가 할당이 된다.
하지만 static을 이용했을 경우 데이터 영역이라는 곳을 사용하게 된다.
static을 통한 인스턴스 생성은 단 한번만 메모리가 잡히고 모든 static 인스턴스가 하나의 공간을 공유하게 된다. 따라서 클래스 이름 으로도 참조해서 사용할 수 있기 때문에 클래스 변수라고도 한다.
그래서 인스턴스를 생성하지 않아도 '클래스이름.클래스변수'와 같은 형식으로 사용할 수 있는 것이다.
따라서 클래스 변수는 공통적인 값을 유지해야한다.
public을 앞에 붙이면 같은 프로그램 내에서 어디서나 접근할 수 있는 전역 변수(global variable)의 성격을 갖는다.static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만,
Garbage Collector(GC)의 관리 영역 밖에 존재하므로 static을 자주 사용하면 프로그램의 종료시까지 메모리가 할당된 채로 존재하기 시스템 성능에 악영향을 줄 수 있다.
말 그대로 정적 함수이다. 정적 함수 내에서는 비정적 필드와 비정적 함수를 참조할 수 없다. static이 붙지 않은 변수와 함수를 참조 할 수 없는 것이다. 또한 정적 함수 내부에서는 this와 super 키워드를 사용할 수 없다.
static 함수는 객체의 생성 없이 호출이 가능하며 객체에서는 호출이 불가능하다. 일반적으로는 유틸리티(Utility) 관련 함수들은 여러 번 사용되기 떄문에 함수 앞에 static을 붙여 구현을 하는 것이 적합하다.
자세한 내용 >>> https://mangkyu.tistory.com/47 블로그 참조 !!
static 변수
static final로 선언을 한다.static 함수
final class로 선언을 하고, 유틸 관련 함수들을 따로 모아둔다.