반응형
static이란?
자바에서 static은 클래스 내에서 정적 필드와 정적 메소드를 정의할 때 사용하는 키워드이다.
정적 필드와 메소드를 합쳐 정적 멤버라고 부르고, 이들은 static 영역에 할당된다.
모든 객체가 정적 멤버를 어디서든지 참조할 수 있는 장점이 있지만
static영역에 있는 멤버들은 프로그램 종료시까지 메모리를 차지한다는 단점이 있어
과도하게 키워드를 남발하게 되면 성능 저하 문제가 발생할 수 있다.
static 선언
필드와 메소드를 정적으로 선언하려면 앞에 static 키워드를 추가하면 된다.
static int num = 0;
public static void staticMethod(){ }
static 필드 사용법
class StaticMember{
static int a = 0; //클레스 필드
int b = 0; //인스턴스 필드
}
public class StaticEx {
public static void main(String[] args) {
StaticMember sm1 = new StaticMember();
StaticMember sm2 = new StaticMember();
System.out.println("sm1.a : " + sm1.a + "\n" + "sm1.b : " + sm1.b);
sm2.a++; //클레스 필드에 1 증가
sm2.b++; //sc2 객체의 인스턴스 필드에 1 증가
System.out.println("\n[sm2.a, b를 1씩 더한 후 sm1.a, b의 값]" +
"\nsm1.a : " + sm1.a + "\n" + "sm1.b : " + sm1.b);
}
}
결과를 보면 sc2 객체에서 정적 필드(a)와 인스턴스 필드(b)에 1을 더해주면 sc1의 정적 필드만 1이 증가하는 모습을 볼 수 있다.
static 메소드 사용법
class StaticMember{
static void print() { //클래스 메소드
System.out.println("정적 메소드는 객체 선언 없이도 사용이 가능.");
}
void print2() { //인스턴스 메소드
System.out.println("인스턴스 메소드는 객체 선언을 통해 사용이 가능.");
}
}
public class StaticEx {
public static void main(String[] args) {
StaticMember.print(); //정적 메소드
StaticMember sm = new StaticMember();
sm.print2(); //인스턴스 메소드
}
}
정적 메소드는 자체로 메모리에 올라가 있기 때문에 객체를 따로 선언하지 않고도 사용할 수 있는 모습을 볼 수 있다.
반응형
'Java, JSP' 카테고리의 다른 글
[Java/자바] interface 인터페이스 사용법 (0) | 2022.01.01 |
---|---|
[Java/자바] 추상메소드와 추상클래스 (0) | 2021.12.31 |
[Java/자바] final 의미와 사용법 (0) | 2021.12.30 |
[Java/자바] 다형성과 오버라이드, 캐스팅 (0) | 2021.12.29 |
[Java/자바] 입력 BufferedReader와 Scanner의 차이 (2) | 2021.12.26 |
댓글