개발/JAVA
static & final 💡💡
코린이딱콩
2022. 8. 29. 19:16
사용자 정의 상수
✔️정적 필드에 final 키워드를 적용하여 값을 변경할 수 없도록 하는 것으로 사용자 정의 상수를 정의할 수 있습니다.
✔️사용자 정의 상수는 정적 필드나 메서드의 접근과 마찬가지로 클래스 이름을 통해 접근하여 사용합니다.
✔️사용자 정의 상수는 접근제한자의 범위에 따라 공유하는 범위가 결정됩니다.
static method
✔️정적 메소드는 static으로 선언된 메서드로써 인스턴스 없이(객체 생성 없이)도 호출할 수 있습니다.
- 정적 메소드는 인스턴스 필드에는 접근할 수 없고, 정적 필드에만 접근할 수 있습니다.
- 정적 메소드는 객체를 통해 사용될 수 있지만, 반드시 클래스명과 함께 사용하기 바랍니다.
✔️예시
class Employee {
private static int nextId = 1;
private int id;
...
public static int getNextId() {
return nextId; //정적 필드의 값을 리턴합니다.
}
...
}
🧐정적 메소드는 언제 사용할까?
- 객체의 상태에 접근하지 않고, 필요한 파라미터가 모두 명시적 파라미터인 경우
- 클래스의 정적 필드에만 접근하는 경우( ex) Employee.getNextId)
static method & instance method
public class StaticEx {
private static String staticMessage = "Static Message";
private String instanceMessage;
public StaticEx(){
this.instanceMessage = "Instance Message";
}
public void showInstanceMessage(){ //인스턴스 메소드에서 스태틱 필드나 스태틱 메서드 접근이 가능하다
System.out.println(instanceMessage);
System.out.println(staticMessage);
StaticEx.showStaticMessage();
}
public static void showStaticMessage() {
System.out.println(staticMessage);
System.out.println(instanceMessage); //에러
//Non-static field 'instanceMessage' cannot referenced from a static context
this.showInstanceMessage(); //에러
//showStaticMessage 메서드는 프로그램이 시작하면서 부터 호출이 가능하기 때문에
//인스턴스화가 되어야지만 호출이 되는 인스턴스 메서드는 호출 불가
StaticEx se = new StaticEx();
se.showInstanceMessage();//인스턴스화 했기 때문에, 호출 가능
StaticEx.showStaticMessage();
}
}