728x90
반응형
정적(static) 멤버
클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다
정적 멤버 선언
정적 필드와 정적 메소드 선언은 선언시 static을 추가적으로 작성하면 된다.
public class 클래스{
//정적 필드
static 타입 필드 [=초기값];
//정적 메소드
static 리턴 타입 메소드 (매개변수 선언, ...){ ...}
}
정적 필드와 정적 메소드는 클래스에 고정된 멤버이므로 클래스 로더가 클래스(바이트코드)를 로딩해서 메소드 메모리 영역에 저장할 때 클래스별로 관리 된다. 그래서 클래스 로딩이 끝나면 바로 사용할 수 있다.
정적 멤버 사용
크래스 이름과 함께 도트(.) 연산자로 접근한다.
클래스.필드;
클래스.메소드(매개값, ... );
예시1) Calculator클래스
public class Car {
// 정적 필드
staic double pi = 3.14159;
// 정적 메소드
static int plus(int x, int y) {
ruturn x + y;
}
static int minus(int x, int y) {
return x - y;
}
}
필드 pi와 정적 메소드 plus(), minus() 아래처럼 사용할 수 있다.
double result1 = 10 * 10 * Calulator.pi;
int result2 = Calulator.plus(10,5);
int result3 = Calulator.minus(10,5);
System.out.println("result1: " + result1);
System.out.println("result2: " + result2);
System.out.println("result3: " + result3);
인스턴스 멤버와 정적 멤버 선택 기준
객체마다 다를 수 있는 필드 값은 인스턴스 필드로 선언
객체마다 다를 필요가 없는 필드 값은 정적 필드로 선언
public class Calculator{
//계산기 별로 색깔이 다를 수 있다.
String color;
//계산기에서 사용하는 파이의 값은 동일 하다.
static double pi = 3.14159;
}
메소드 블록에 인스턴스 필드 또는 인스턴스 메소드를 사용할 경우는 인스턴스 메소드로 선언
메소드 블록에 인스턴스 필드 또는 인스턴스 메소드를 사용지 않는 경우는 정적 메소드로 선언
public class Calculator{
//인스턴스 필드
String color;
//인스턴스 메소드
void setColor(String color){
this.color = color;
}
//정적 메소드
static int plus(int x, int y){
return x + y;
}
//정적 메소드
static int minus(int x, int y){
return x - y;
}
정적 메소드 선언 시 주의 할 점
- 정적 메소드 선언 시 그 내부에 인스턴스 필드 및 메소드 사용할 수 없다.
- 정적 메소드 선언 시 그 객체 자신 참조인 this키워드 사용할 수 없다.
//인스턴스 필드와 메소드
int field1;
void method1() { ... }
//정적 필드와 메소드
static int field2;
static void method2() { ... }
//정적 메소드
static void Method3{
this.field1 = 10; //컴파일 에러
this.method1(); //컴파일 에러
field2 = 10; //정상 작동
method2(); //정상 작동
}
만약, 정적 메소드에서 인스턴스 멤버를 사용하고 싶다면 아래처럼 객체를 먼저 생성하고 참조 변수로 접근 해야한다.
static void Method3{
ClassName obj = new ClassName();
obj.field1 = 10;
obj.method1();
}
예시2) 정적 메소드 선언 시 주의 할점
public class Car {
// 인스턴스 필드
int speed;
// 인스턴스 메소드
void run() {
System.out.println(speed + "으로 달린다.");
}
public static void main(String[] args) {
Car xCar = new Car(); //객체 생성
xCar.speed = 100;
xCar.run();
}
}
※용어 정리
-
정적 멤버: 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다. 이들을 각각 정적 필드, 정적 메소드라 부른다.
-
static: 정적 멤버를 선언할 때 사용하는 키워드
본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.
728x90
반응형
'Work & Study > JAVA (& 혼공자Java)' 카테고리의 다른 글
자바(Java) - 패키지와 접근 제한자1 (패키지선언 & import문) (0) | 2020.10.19 |
---|---|
자바(Java) - 인스턴스 멤버와 정적 멤버3 (싱글톤 & final필드, 상수) (0) | 2020.10.16 |
자바(Java) - 인스턴스 멤버와 정적 멤버1 (인스턴스멤버 & this) (0) | 2020.10.15 |
자바(Java) - 메소드4 (메소드호출) (0) | 2020.10.14 |
자바(Java) - 메소드3 (리턴문) (0) | 2020.10.12 |