반응형
정적(static) 멤버 클래스에 고정된 멤버로서 객체(인스턴스)를 생성하지 않고 사용할 수 있다
각각 정적 필드(변수), 정적 메소드가 있다
정적 멤버를 선언 할 때에는 앞에 static만 붙이면 된다
ex )
double PI = 3.141592;
->
static double PI = 3.141592;
1.1 정적 필드
필드를 선언할 때, 객체마다 가지고 있을 필요성이 없는 공용적인 데이터라면 정적 필드로 선언하는 것이 좋다
ex )
public class Calculator {
String color; //객체마다 다른 색깔
static double PI = 3.141592; //객체마다 공용된 PI 값
...
}
+ ) 위 코드에서 PI 같이 후에 바뀌지 않는 상수(static final)는 " static final double PI = " 로 선언할 수 있다
1.2 정적 메소드
메소드를 선언할 때, 인스턴스 필드를 이용하지 않는다면 정적 메소드로 선언하는 것이 좋다
ex )
public class Calculator {
String color; //인스턴스 필드
void setColor(String color) { //인스턴스 메소드
this.color = color;
}
static int plus(int x, int y) { //외부에서 주어진 매개값을 이용한 정적 메소드
return x + y;
}
}
2. 정적 멤버 사용
정적 필드와 정적 메소드는 클래스 객체 생성 없이 클래스 이름으로 접근할 수 있다
물론, 객체 참조 변수로도 접근이 가능하다
ex )
클래스명 : Calculator
정적 필드 : PI
정적 메소드 : plus(int x, int y)
Calculator myCal = new Calculator();
double result1 = 10 * 10 * Calculator.PI;
double result2 = 10 * 10 * myCal.PI;
int resultA = Calculator.plus(1, 2);
int resultB = myCal.plus(1, 2);
정적 필드를 선언과 동시에 초기값을 줄 수 있다
그러나 정적 필드의 복잡한 초기화 작업을 위해 정적 블록(static block)을 사용할 수 있다
static {
...
}
정적 블록은 클래스가 메모리로 로딩될 때 자동적으로 실행된다
클래스 내부에 여러개가 선언되어도 상관없고, 선언된 순서대로 실행된다
더불어, 정적 블록과 정적 메소드에 인스턴스 필드나 인스턴스 메소드를 사용할 수 없다
사용하고 싶다면, 정적 블록에서 객체를 생성하고 참조 변수로 접근해야 한다
아래 링크는 이해하는 데에 도움되는 점프 투 자바 사이트이다 !
반응형
'etc.' 카테고리의 다른 글
[Java] BufferedReader 클래스로 입력받기 (Scanner와의 차이) (0) | 2020.05.17 |
---|---|
[Java] 접근 제한자(Access Modifier) / 접근 수준 지시자(Access-level Modifier) (0) | 2020.05.02 |
[C code] 기본 자료형 (정수형, 실수형) / 출력 서식문자 (0) | 2020.03.10 |
[C code] 프로그램 바로 종료시키기 exit() (0) | 2020.02.12 |
[티스토리] 코드블럭 글꼴, 스타일 설정 / 라인넘버 표처럼 안 나오게 설정 (6) | 2020.02.03 |