- static: 정적이다. -> 클래스에 고정된 멤버로 클래스 멤버라 부름.
- 클래스에 고정된 멤버 -> 클래스 로더가 클래스를 로딩하면 메모리에 할당시켜 클래스 로딩이 끝나면 바로 사용 가능
- 전역적으로 쉽게 재사용하는 멤버나, 잘 변하지 않는 변수/메서드를 사용할 때 쓰임 -> 만들어놓고 클래스 호출이나 객체 생성을 따로 할 필요없이 바로바로 사용 가능
- 메모리 자원을 할당해놓고 사용 -> 너무 많이 사용하면 메모리를 많이 차지하게 되어 프로그램이 무거워짐.
static 필드 사용 예시로,
class Number {
static int num1 = 0; // 클래스 필드
int num2 = 0; // 인스턴스 필드
}
public class Main {
public static void main(String[] args) {
Number number1 = new Number(); // 첫 번째 Number
Number number2 = new Number(); // 두 번째 Number
number1.num1++; // 클래스 필드 num1을 +1 증가시킴
number1.num2++; // 인스턴스 필드 num2를 +1 증가시킴 -> 두번째 Number 클래스 객체인 number2로 접근 시 결과 반영 X
System.out.println("두번째 Number의 인스턴스 필드 num1 :" + number2.num1);
System.out.println("두번째 Number의 인스턴스 필드 num2 :" + number2.num2);
}
}
첫 번째 Number의 인스턴스 필드 num1 :1
두 번째 Number의 인스턴스 필드 num2 :0
number1.num2++;로 number1 인스턴스로 접근해서 num2를 직접 +1 시켰으면서 number1.num2를 했을 때 static을 안 썼는데? 왜 +가 됐지? 라는 멍청했던 실수때문에 정리해봤다.
static 메소드 사용 예시로는,
class Test {
static void test1() { // 클래스 메소드
System.out.println("test static");
}
void test2() {
System.out.println("test static");
}
}
public class Main {
public static void main(String[] args) {
System.out.println("static(클래스) 메소드 test1() 호출");
Test.test1(); // 인스턴스를 생성하지 않고 호출 가능
System.out.println();
Test test = new Test(); // 인스턴스 생성
System.out.println("인스턴스 메소드 test2() 호출");
test.test2(); // 인스턴스를 생성해야만 호출 가능
}
}
static(클래스) 메소드 test1() 호출
test static
인스턴스 메소드 test2() 호출
test static
'Programming > Java' 카테고리의 다른 글
[Java] 가비지 컬렉션(Garbage Collection) (0) | 2022.01.14 |
---|---|
[Online Study 2주차] 자바 데이터 타입, 변수, 그리고 배열 (0) | 2022.01.13 |
[Java] 변수 종류 - 클래스 변수 / 인스턴스 변수 / 지역 변수 (1) | 2022.01.13 |
[Online Study 1주차] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) | 2022.01.11 |
[Java] 접근 제어자(public, protected, default, private) (0) | 2021.10.01 |