Static 기본 개념
static은 "정적" 또는 "고정된"이라는 의미를 갖는다.
즉, static이 붙은 경우 객체가 아닌 클래스에 속하며, 해당 클래스의 모든 인스턴스가 공유한다.
이로 인해 static 멤버는 클래스 수준에서 관리됨으로 객체 생성 없이 직접 접근할 수 있다.
static - class method
no static - instance method
Static 변수
class StaticTestClass {
static int staticVar = 10;
}
위 예제에 staticVar는 StaticTestClass에 속하고 모든 StaticTestClass 객체 간에 값을 공유한다.
즉, 객체 생성 없이 StaticTestClass.staticVar 와 같이 접근 가능하다.
Static 메서드
class MathClass {
static int add(int a, int b) {
return a + b;
}
}
public class MainClass {
public static void main(String[] args) {
MathClass mathClass = new MathClass();
int result = MathClass.add(8, 2);
System.out.println(result); // 10
}
}
add method는 MathClass의 static 메서드로, 객체 생성 없이 바로 사용 가능하다.
MathClass.add(8, 2) 와 같이 호출 가능하다.
반대로, static을 사용하지 않는 경우 instance에 메서드 이므로 아래와 같이 객체 생성이 필요하다.
class MathClass {
public int a, b;
public int add(){
return this.a + this.b;
}
}
public class MainClass {
public static void main(String[] args) {
MathClass mathClass = new MathClass();
mathClass.a = 8;
mathClass.b = 2;
int result = mathClass.add();
System.out.println(result); // 10
}
}
주의사항
1. static 멤버는 객체에 종속되지 않으므로 객체의 상태를 변경하지 말아야 한다.
2. static 메서드 내에서 this 키워드를 사용할 수 없다. 객체 인스턴스에 접근할 수 없기 때문이다.
3. static 멤버는 클래스 로딩 시 초기화되므로 프로그램 종료 시까지 메모리에 상주하게 된다. 이로 인해 과용 시 메모리 부하가 발생할 수 있으므로 신중하게 사용해야 한다.
반응형
'Dev > Spring&Java' 카테고리의 다른 글
[Java] 오버로딩(Overloading)과 오버라이딩(Overriding)이란 (0) | 2023.09.17 |
---|---|
[Java] 접근 제어자(Access Modifiers) 활용해보기 (0) | 2023.09.11 |
[Java] 접근 제어자(Access Modifiers) 이해하기 (0) | 2023.09.11 |
[Spring] 이클립스에 Spring 프로젝트 생성 (STS4 설치) (0) | 2023.09.05 |
[SOLID] 좋은 객체 지향 설계 5가지 원칙 (0) | 2023.08.14 |