-
static
: 정적멤버로 정의
- static 멤버는 객체보다도 먼저 생성된다(메모리 static 사용하므로)
- 객체 생성 없이도 존재한다.
- 초기화는 한번만 수행한다.
- static 변수는 그 클래스의 모든 객체들이 공용으로 사용한다.
- 따라서 static 멤버는 공용으로 사용되는것, 공통적인 변수이다.
- 사용시 정적 멤버는 클래스 이름으로 접근:
클래스명.멤버
public class StaticTestMain {
public static void main(String[] args) {
System.out.println(StaticTest.b);
}
}
즉, StaticTest s = new StaticTest( ); 로 객체를 만들지 않아도됨.
b가 static이기 때문에 b만 증가한다.
그럼 이게뭔데?
저장되는 메모리 영역이 다르다.
static 메모리는 객체생성과 상관없이 메모리중 가장 먼저 생성이되는 메모리다.
- static 메서드 특징:
- 일반 멤버변수, 일반 메서드 호출 불가능
- static 멤버변수, 메서드 호출 가능
- 일반메서드: 일반 멤버변수, static 멤버변수 모두 사용가능
- 일반 멤버변수, 일반 메서드 호출 가능
- static 멤버변수, 메서드 호출 가능
-static 멤버 변수의 용도
- 상수 정의(final)
- 모든 객체들의 공유 값 저장
- static 메서드의 용도
- 객체와 상관없이 고정기능을 제공
- 객체 생성이 없기 때문에 빠르게 사용
- final: 상수화(read-only) = 변경불가 키워드
- 변수는 새로운 값을 할당하면 값이 변하는 특성이 있다.
- 상수는 변경이 불가능하다!
- 상수는 대입연산자(=) 를 선언할 때 말고는 사용불가능.
- 맨 처음만 할당하고 변경 못함~
final 변수: 상수가된다.
final 메서드: 변경 불가(오버라이드 불가)
final 클래스: 상속 불가(이 클래스는 이게 끝. 상속한 하위 클래스 따위 만들지 않는다.)
- 선언문에서 할당 → 멤버변수 초기화 값 a=0;
- 초기화 블럭 → a=500'
- 생성자 → a = 1000;
결과 적으로 가장 마지막 순서의 값이 들어가서 a = 1000; 이 된다!
즉, class 안의 static 멤버변수는
main 메소드 안에서
class이름.
- 싱글톤
: 생성자를 private로 하여 클래스 밖의 객체 생성을 막고 내부에서 생성한 객체를 공용으로 사용하는 기법.
- 보통 자원 관리를 위해 이 기법을 사용한다.
- 내부에서 생성한 객체를 외부에 전달하는 기능의
.getInstance()
메서드를 제공해야한다.
메서드는 보통 public을 붙여준다.