Static이란 ?

  • Static이란 ' 정적인' 이라는 뜻을 가짐
  • Static 키워드를 통해 생성된 정적 멤버들은 Static 영역에 할당됨
  • Static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버로 어디서든지 참조 가능
  • Gabage collector의 영역 밖에 존재하여 관여하지 않음
  • 프로그램 시작될때부터 종료될때까지 메모리 값에 유지된 채로 존재

 

 

 

[ static 변수 ]

static이 붙지 않은 메서드나, 변수의 경우 객체가 생성될 때마다 호출되어 서로 다른 값을 가질 수 있음

각 객체들에서 공통적으로 하나의 값이 유지되어야 할 경우 static 사용

 

예시로 좋아요 개수를 받을 경우

package study;

public class LikeCount {    

	int count;    
    
	public LikeCount() {      
		this.count++;      
		System.out.println("좋아요 개수 : " + count);  
	}    
    
	public static void main(String[] args) {    
		LikeCount lc1 = new LikeCount();     
		LikeCount lc2 = new LikeCount();   
	}
}

 

static 사용하지 않고  lc1, lc2 객체가 생성될 때 lc1의 count와 lc2의 count가 서로 다른 메모리를 할당받아

메모리를 각각 받았으므로 좋아요 개수는 계속 1이 나오는 결과가 나온다

 

좋아요 개수 : 1

좋아요 개수 : 1

 

package study;

public class LikeCount {    

	static int count;    
    
	public LikeCount() {      
		this.count++;      
		System.out.println("좋아요 개수 : " + count);  
	}    
    
	public static void main(String[] args) {    
		LikeCount lc1 = new LikeCount();     
		LikeCount lc2 = new LikeCount();   
	}
}

이 경우에는 static 변수를 사용하여 lc1, lc2 객체가 하나의 메모리를 공유하게 되어 좋아요 개수가 증가하게 된다

 

좋아요 개수 : 1

좋아요 개수 : 2

 

 

[ static 메소드 ]

  • 객체 생성 없이 사용 가능
  • 프로그램이 시작하면 메모리의 static 영역에 적재되고, 프로그램 종료될 때 해제된다
  •  Static 메서드 내에서 인스턴스 변수 사용 불가능, ststic 변수만 접근 가능

정적 메서드 사용 예시

class Name{
    static void print1() { //클래스 메소드
	System.out.println("이름 : 홍길동");
    }

    void print2() { //인스턴스 메소드
	System.out.println("이름 : 김상순");
    }
}

public class Static_ex {
	
    public static void main(String[] args) {
        Name.print1(); //인스턴스를 생성하지 않아도 호출이 가능
    	
        Name name = new Name(); //인스턴스 생성
        name.print2(); //인스턴스를 생성하여야만 호출이 가능
    }
}

 

 

 

참조 : https://dev-coco.tistory.com/23, https://coding-factory.tistory.com/524

 

'java > 공부' 카테고리의 다른 글

[JAVA] String, StringBuffer, StringBuilder 차이  (0) 2024.01.31
[JAVA] new String()과 String literal("") 차이  (0) 2024.01.22

+ Recent posts