클래스 변수
📌 클래스 변수(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);
}
}
'Java > Java' 카테고리의 다른 글
[Java] String 클래스 (0) | 2022.10.13 |
---|---|
[Java] 메소드 오버로딩(Method Overloading) (0) | 2022.10.13 |
[Java] this (0) | 2022.10.13 |
[Java] 정보 은닉(Information Hiding)과 접근 수준 지시자(Access-level Modifiers) (0) | 2022.10.13 |
[Java] 생성자(Constructor)와 디폴트 생성자(Default Constructor) (0) | 2022.10.13 |
댓글