자바

[Java] static 이란?

menuhwang 2022. 9. 30. 18:29

static 이란?


static 변수 = 정적 변수 = 클래스 변수 = 공용 변수

 

  • 객체를 생성하지 않고도 static자원에 접근이 가능
  • 자바에서 static 키워드를 사용한다는 것은 메모리에 한 번 할당되어 프로그램이 종료될 때 해제되는 것을 의미

 

 

인스턴스 변수 & 스태틱 변수 비교


인스턴스 변수

class Number {
	int num = 0;

	int add() {
		return ++this.num;
	}
}

public class Main {
	public static void main(String[] args) {
		Number num1 = new Number();
		Number num2 = new Number();
		num1.add();
		System.out.println(num1.num) // 1
		System.out.println(num2.num) // 0
}

 이 경우 객체를 생성하면 각각의 메모리를 할당받기 때문에 add() 메서드를 실행시킨 객체의 메모리값만 변하게 된다.

 

 

 

 

스태틱 변수

  • 메모리 절약의 이점
  • 변수 값 공유
class Number {
	static int num = 0;
	int num2 = 0;

	int add() {
		return ++num;
	}

	int add2() {
		return ++num2;
	}
}

public class Main {
	public static void main(String[] args) {
		Number num1 = new Number();
		Number num2 = new Number();
		num1.add();
		System.out.println(num1.num) // 1
		System.out.println(num2.num) // 1
		System.out.printlb(Number.num) // 1
	}
}

 스태틱 변수로 선언된 경우 객체를 생성하면 메모리값을 공유하게 된다.

따라서 여러 객체를 생성하고 add() 메소드 실행 시 변수는 같은 값을 갖는다.

 

 

 

 

인스턴스 메소드 & 스태틱 메소드


인스턴스 메소드

  • 객체 생성 필요.
  • 객체를 생성한 후 사용되기 때문에 메소드 내부에서 인스턴스 변수 및 스태틱 변수 사용 가능.

 

스태틱 메소드

  • 정적메서드를 선언하면 객체를 생성하지 않고 메소드를 사용할 수 있다.
  • 스태틱 메소드 안에서는 스태틱 변수만 접근할 수 있다.
  • 유틸리티 메서드 작성에 많이 사용된다.