[Java] 클래스 : 정적 멤버, final 필드

Local Gaji·2023년 8월 15일

이것이 자바다

목록 보기
4/18

🎈 인스턴스멤버

인스턴스 멤버는 객체에 소속된 멤버, 객체를 생성해야 사용할 수 있는 멤버이다.
앞에서 사용한 필드 , 메서드 는 인스턴스 멤버에 해당한다.


인스턴스 멤버를 외부 클래스에서 사용하려면, 클래스 객체를 생성하고 참조 변수로 접근해야 한다.

ClassName referVal = new ClassName();
referVal.method1();

메서드는 메서드 영역에 저장되어있고 공유되지만, 객체 없이는 사용하지 못하도록 제한되어있다.


🎈 정적 멤버

객체를 생성할 필요 없이 클래스를 통해 바로 사용이 가능한 멤버

public class 클래스 {
  static 타입 필드;                  // 정적 필드 선언
  static 리턴타입 메서드() { ... }    // 정적 메서드 선언
}

정적 필드 : 공용적인 필드는 정적 필드로 선언하는것이 좋다.

public class Calculator {
  static double pi = 3.14;
}

정적 메서드 : 인스턴스 필드를 사용하지 않는 메서드는 정적 메서드로 선언하는 것이 좋다

public class Calculator {
  static int plus(int x, int y) { return x + y; }
}

🔰 정적 멤버 사용

클래스 외부에서 클래스 이름으로 접근해서 사용이 가능하다.

/* Calculator 클래스 외부 */

double area = 5 * 5 * Calculator.pi;
int add = Calculator(1 + 2);

🔰 정적 블록

필드 선언과 동시에 초기값을 설정하는 것이 좋지만,
복잡한 초기화 작업이 필요하다면 정적 블록을 사용한다.

static String name;
static {
  name = firstName + " " + lastName;
}

정적 메서드, 정적 블록에서 인스턴스 멤버를 사용하려면
객체를 생성하고 참조 변수로 접근해야 한다.

public class ClassName {
  static void method() {
    ClassName refer = new ClassName();
    refer.instanceFieldA = 10;
    refer.instanceMethodA();
  }
}

🎈 final 필드

인스턴스 필드, 정적 필드는 값을 변경할 수 있다.
final 필드는 읽기전용 필드이다.

final 필드의 초기값은 필드 선언시 지정할 수도 있고
생성자에서 초기값을 지정할 수도 있다.

public class User {
  /* 선언 시 지정 */
  final String nation = "Korean";
  
  /* 생성자에서 지정 */
  final String dob;
  User(String dob) {
    this.dob = dob;
  }
}

🔰 상수 : static final

원주율 등 불변 값들을 상수 필드에 저장한다.
객체마다 따로 저장할 필요가 없고, 값을 변경할 필요도 없으므로
static 필드인 동시에 final 필드이다.

static final double pi = 3.14;

상수에 접근하려면 정적 필드처럼 접근한다.

0개의 댓글