반응형
정적멤버와 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 |
어디까지 예시이며, 위와같은 코드는 바보같은 코드이다.
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] 제네릭(Generic) 문법 정리 (4) | 2019.02.12 |
---|---|
[JAVA] final 필드와 상수, final 클래스와 final 메소드 (0) | 2018.11.26 |
[JAVA] 예외처리 - 예외처리 방법 (2) | 2018.09.19 |
[JAVA] 예외처리 - 에러 및 예외종류 (0) | 2018.09.19 |
[JAVA] 컬렉션프레임워크(CollectionFramework) 6 - TreeMap (0) | 2018.09.13 |