본문 바로가기
Java/Java

[Java] static(클래스 변수, 클래스 메소드)

by 기록하는_사람 2022. 10. 13.

클래스 변수

📌 클래스 변수(static 변수)

: 클래스 내에 선언된 변수 앞에 static 선언을 한 변수.

  변수가 선언된 클래스의 모든 인스턴스가 공유하는 변수.

  어떠한 인스턴스에도 속하지 않는 상태로 메모리 공간에 딱 하나만 존재하는 변수.

  static [자료형] [변수명];

 

📌 클래스 변수 접근 방법

- 클래스 내부 접근 : 변수 이름으로 직접 접근.

- 클래스 외부 접근 : 클래스 또는 인스턴스의 이름을 통해 접근.

 

📌 클래스 변수는 해당 클래스 정보가 가상머신에 의해 읽히는 순간 메모리 공간에 할당되어 초기화됨. 

      따라서, 인스턴스 생성 이전에 메모리 공간에 존재함. 

     클래스 변수의 할당과 초기화는 인스턴스의 생성과 무관하게 이루어짐. 

 

📌 인스턴스 간에 데이터 공유가 필요한 상황에서 클래스 변수 선언하여 사용함. 

 

📄 Test.java

package test;

class CntNum {
	static int num = 100;
	
	CntNum() {
		num++;
		System.out.println("생성자 호출 " + num);
	}
}
public class Test {
	public static void main(String[] args) {
		CntNum.num += 10;  // 인스턴스(객체)를 생성하지 않고, num에 접근.
		System.out.println(CntNum.num);  // 110
	}

}

+ 추가 설명

더보기

클래스 변수는 해당 클래스 정보가 가상머신에 읽히는 순간 메모리 공간에 할당되고 초기화되기 때문에

인스턴스의 생성되지 않아도 사용이 가능함. 

 

클래스 메소드

📌 클래스 메소드(static 메소드)

: 클래스 내에 정의된 메소드에 static 선언을 한 메소드.

  어떤한 인스턴스에도 속하지 않는 상태로 메모리 공간에 딱 하나만 존재하는 메소드.

 

📌 클래스 메소드는 해당 클래스 정보가 가상머신에 의해 읽히는 순간 메모리 공간에 할당되어 초기화됨. 

      따라서, 인스턴스 생성 이전에 메모리 공간에 존재함. 

     클래스 메소드의 할당과 초기화는 인스턴스의 생성과 무관하게 이루어짐. 

 

📌 클래스 메소드는 인스턴스에 속하지 않기 때문에 인스턴스 변수에 접근이 불가능함.

      인스턴스 메소드의 호출도 불가능. 

 

📌 클래스 메소드는 같은 클래스에 정의되어 있는 다른 클래스 메소드나 성격이 동일한 클래스 변수에 접근 가능. 

 

📄 Calculator.java

package calculator;

class SC {
	static final double PI = 3.1415;
	
	static double add(double a, double b) {
		return a + b;
	}
	
	static double min(double a, double b) {
		return a - b;
	}
	
	static double calCircleArea(double r) {
		return PI * r * r;
	}
	
	static double calCirclePeri(double r) {
		return PI * ( r * 2);
	}
}

public class Calcaulator {

	public static void main(String[] args) {
		double n1 = 10;
		double n2 = 5;
		double r = 5;
		
		System.out.println(n1 + " + " + n2 + " = " + SC.add(n1, n2));
		System.out.println(n1 + " - " + n2 + " = " + SC.min(n1, n2));
		System.out.println("r : " + r + " Circle Area : "+ SC.calCircleArea(r));
		System.out.println("r : " + r + " Circumference : "+ SC.calCirclePeri(r));
	}

}

 

static 초기화 블록

📌 static 초기화 블록(Static Initialization Block)

: 가상 머신이 클래스 정보를 읽어 들일 때 실행. 

  클래스 변수를 선언과 동시에 초기화 할 수 있음. 

 

📄 프로그램 실행 날짜 저장하는 프로그램. 

package test;

import java.time.LocalDate;

public class Test {
	static String date;
	
	static {  // 클래스 로딩 시 한 번만 실행됨. 
		LocalDate nDate = LocalDate.now();
		date = nDate.toString();
	}
	
	public static void main(String[] args) {
		System.out.println(date);
	}

}

댓글