본문 바로가기
Java, JSP

[Java/자바] static 정적 변수와 메소드

by LasBe 2021. 12. 23.
반응형

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(); //인스턴스 메소드
		
	}
}

 

정적 메소드는 자체로 메모리에 올라가 있기 때문에 객체를 따로 선언하지 않고도 사용할 수 있는 모습을 볼 수 있다.

반응형

댓글


오픈 채팅