반응형

1. 정적(static) 멤버란?

 - Static변수와 Static메소드를 합쳐 정적 멤버라고 한다. (또는 클래스 멤버)

 - 클래스에 소속된 멤버로 인스턴스 생성 여부에 상관없이 모든 인스턴스에서 공통으로 사용한다.

 

2. 정적(static) 멤버 특징

 - Static 키워드를 통해 생성된 정적 멤버들은 Heap 영역이 아닌 Static 영역에 할당된다.

 - Static 영역에 할당된 메모리는 인스턴스 생성과는 별개로 모든 객체가 공유하여 사용할 수 있는 장점이 있다.

   (Gabage Collector의 관리 영역 밖에 존재하기 때문에 Static을 남발하게 되면 시스템 성능에 문제가 생길 수 있다.)

 

3. 정적(static) 멤버 vs 인스턴스 멤버

 - 필드 혹은 메서드 생성시 정적으로 생성할 것인지, 인스턴스로 생성할 것인지에 대한 판단 기준은 공용으로 사용

   하느냐 아니냐로 판단하면 된다.

 

4. 정적(static) 멤버 사용 예시

 - 정적 필드

class Number{
    static int num = 0; //클래스 필드
    int num2 = 0; //인스턴스 필드
}

public class Static_ex {
	
    public static void main(String[] args) {
    	Number number1 = new Number(); //첫번째 number
    	Number number2 = new Number(); //두번쨰 number
    	
    	number1.num++; //클래스 필드 num을 1증가시킴
    	number1.num2++; //인스턴스 필드 num을 1증가시킴
    	System.out.println(number2.num); //두번째 number의 클래스 필드 출력
    	System.out.println(number2.num2); //두번째 number의 인스턴스 필드 출력
    }
}

 

- 정적 메서드 (정적 메소드는 유틸리티 함수를 만드는데 유용하게 사용)

class Name{
    static void print() { //클래스 메소드
	System.out.println("내 이름은 홍길동입니다.");
    }

    void print2() { //인스턴스 메소드
	System.out.println("내 이름은 이순신입니다.");
    }
}

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

 

 

참고) https://coding-factory.tistory.com/524

'개발 > Java' 카테고리의 다른 글

String, StringBuilder, StringBuffer  (0) 2022.12.13
[Java] Garbage Collection(가비지 컬렉션)  (2) 2022.12.02
equals()  (0) 2022.11.30
[자바/JAVA] this  (0) 2021.06.24
[자바/JAVA] 생성자와 초기화  (0) 2021.06.23

+ Recent posts