정적 멤버와 static

J·2020년 11월 19일
0

정적(static) : 고정된

클래스에 고정된 멤버로, 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다.
객체(인스턴스)에 소속된 멤버가 아니라 클래스에 소속된 멤버로, 클래스 멤버라고도 한다.

정적 멤버를 선언할 땐

앞에 static을 붙이면 된다.
이는 고정된 멤버이므로, 클래스의 로딩이 끝나면 바로 사용할 수 있다.

인스턴스 필드로 선언할까? 정적 필드로 선언할까?

객체마다 가지고 있어야 하는 데이터라면 인스턴스 필드로,
객체마다 가지고 있을 필요가 없는 공용적인 데이터라면 정적 필드로!

그럼 메소드는?

인스턴스 필드를 이용해 실행하는 거라면 인스턴스 메소드로,
인스턴스 필드를 이용하지 않는다면 정적 메소드로!
인스턴스 필드를 사용하지 않는다는 건 매개값 없이 실행하거나, 외부에서 주어진 매개값을 가지고 메소드를 실행하는 경우를 말한다.

정적 멤버를 사용할 땐

그동안 객체(인스턴스)를 통해 멤버를 호출할 때에는 객체.필드 혹은 객체.메소드(매개값1, 매개값2, ...)와 같은 형태였다. 이번엔 인스턴스를 생성하지 않고 호출하는거니까 클래스를 통해 호출하면 된다!

className.field;
className.method(value1, value2, ...);

아 정말 쉽다 아마도 ?

정적 초기화 블록에 대해

정적 필드를 선언할 때에도 선언과 동시에 초기값을 주는 것이 보통이다.
하지마 ㄴ계산이 필요한 초기화 작업이 있을 수 있다. 인스턴스 필드는 생성자에서 초기화하지만, 정적 필드는 객체 생성 없어도 사용해야하므로, 생성자를 이용한 초기화가 불가능하다. 생성자는 객체를 생성할 때에만 실행되기 때문에!
정적 필드의 복잡한 초기화 작읍얼 위해 정적 블록이 제공되는 것이다.

static { 초기화 내용 }

정적 블록은 클래스가 메모리로 로딩될 때 자동적으로 실행된다.
정적 블록은 클래스 내부에 여러개가 선언되어도 상관 없고, 클래스가 로딩될 때 선언된 순서대로 실행된다.






  • 참고 : 이것이 자바다 (by 신용권님)

0개의 댓글