static 변수와 메소드

곽동현·2022년 10월 26일

JAVA

목록 보기
2/6
post-thumbnail
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에 대하여 정확히 알고 넘어가자

static - 변수

변수 종류는 크게 3가지로 나눌 수 있다.
클래스변수, 인스턴스변수, 지역변수로 세 종류가 있다.

변수의 종류를 결정짓는 중요한 요소는 변수의 선언된 위치이다.

인스턴스변수(instance variable)

클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어진다.
클래스 영역 안에 선언되었기 때문에 사용하려면 인스턴스를 생성해야 한다. 각 인스턴스마다 다른 값을 저장할 수 있다.

지역변수(local variable)

  • 함수 내에 선언되어 함수 내에서만 사용 가능하며, 메서드가 종료되면 소멸되어 사용할 수 없게 된다.
  • 지역변수가 선언된 블럭{} 내에서만 사용 가능하며, 블럭{}을 벗어나면 소멸되어 사용할 수 없다.

클래스변수(class variable)

  • 인스턴스변수 앞에 static을 붙힌 변수

일반적으로 클래스를 만들면 해당 클래스의 인스턴스는 여러 개를 만들 수 있다. 보통 A라는 클래스가 있으면 A a = new A(); 이런 식으로
new 연산자를 이용해서 객체를 만든다. 이렇게 new를 이용할 경우엔 Heap 영역에 메모리가 할당이 된다.
하지만 static을 이용했을 경우 데이터 영역이라는 곳을 사용하게 된다.

static을 통한 인스턴스 생성은 단 한번만 메모리가 잡히고 모든 static 인스턴스가 하나의 공간을 공유하게 된다. 따라서 클래스 이름 으로도 참조해서 사용할 수 있기 때문에 클래스 변수라고도 한다.
그래서 인스턴스를 생성하지 않아도 '클래스이름.클래스변수'와 같은 형식으로 사용할 수 있는 것이다.
따라서 클래스 변수는 공통적인 값을 유지해야한다.

  • static은 클래스가 메모리에 로딩될 때 생성되어 프로그램이 종료될 때 까지 유지된다.
  • public을 앞에 붙이면 같은 프로그램 내에서 어디서나 접근할 수 있는 전역 변수(global variable)의 성격을 갖는다.

static의 장단점?

static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만,
Garbage Collector(GC)의 관리 영역 밖에 존재하므로 static을 자주 사용하면 프로그램의 종료시까지 메모리가 할당된 채로 존재하기 시스템 성능에 악영향을 줄 수 있다.

static - 함수

말 그대로 정적 함수이다. 정적 함수 내에서는 비정적 필드와 비정적 함수를 참조할 수 없다. static이 붙지 않은 변수와 함수를 참조 할 수 없는 것이다. 또한 정적 함수 내부에서는 thissuper 키워드를 사용할 수 없다.
static 함수는 객체의 생성 없이 호출이 가능하며 객체에서는 호출이 불가능하다. 일반적으로는 유틸리티(Utility) 관련 함수들은 여러 번 사용되기 떄문에 함수 앞에 static을 붙여 구현을 하는 것이 적합하다.

자세한 내용 >>> https://mangkyu.tistory.com/47 블로그 참조 !!

static 올바른 활용

static 변수

  • 일반적으로 상수들만 모아서 사용하며 상수의 변수명은 대문자와 언더바를 조합하여 명명한다. 또한 상속을 방지하기 위해 static final로 선언을 한다.

static 함수

  • 마찬가지로 상속을 방지하기 위해 final class로 선언을 하고, 유틸 관련 함수들을 따로 모아둔다.
profile
읽고 쓰며 생각합니다 💡

0개의 댓글