프로그래밍 노트/JAVA

[JAVA] 정적멤버와 static

깡냉쓰 2018. 11. 26. 23:12
728x90
반응형
정적멤버와 static

정적(static)은 ‘고정된’이라는 의미를 가지고 있다.

정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메서드를 말한다.

정적 멤버 선언

1
2
3
4
5
6
7
public class 클래스{
    // 정적 필드
    static 타입 필드
 
    // 정적 메소드
    static 리턴 타입 메소드() {… }
}
cs


정적필드, 정적 메소드는 클래스에 고정된 멤버이므로 클래스 로더가 클래스(바이트 코드)를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리된다. (클래스 로딩이 끝나면 바로 사용할 수 있음)

인스턴스 필드 => 객체마다 가지고 있어야할 데이터
정적 필드 => 객체마다 가지고 있을 필요성이 없는 공용적인 데이터
일 경우 각각에 맞게 사용하면 된다.

1
2
3
4
5
6
public class Calculator{
    String color;
    static double pi = 3.14159;
    static int plus(int x, int y); // 외부에서 주어진 매개값들을 가지고 수행하므로 정적메서드로 선언하는 것이 좋다
    static int minus(int x, int y);
}
cs

Double result = 10 * Calculator.pi;
Int result2 = Calculator.plus(10,5);
형식으로 사용한다.

정적 초기화 블록
정적 필드는 다음과 같이 필드 선언과 동시에 초기값을 주는 것이 보통이다.
Static double pi = 3.14159;
하지만 계산이 필요한 초기화 작업이 있을 수 도 있는데, 정적 필드는 객체 생성 없이도 사용해야 하므로 생성자에서 초기화 작업을 할 수 없다.
이럴경우 정적 블록(static block)을 이용한다.
Static{
    ...
}

정적 블록은 클래스가 메모리로 로딩될 때 자동적으로 실행된다.
1
2
3
4
5
6
7
8
9
public class ClassName{
    ...
    static double pi;
    static{
        pi = 3.14159;
    }
    ...
}
 
cs
어디까지 예시이며, 위와같은 코드는 바보같은 코드이다.



728x90
반응형