[Java] 정적멤버(static)

Walter Mitty·2022년 10월 26일
0

KOSTA

목록 보기
20/33
  • static: 정적멤버로 정의

    • static 멤버는 객체보다도 먼저 생성된다(메모리 static 사용하므로)
    • 객체 생성 없이도 존재한다.
    • 초기화는 한번만 수행한다.
    • static 변수는 그 클래스의 모든 객체들이 공용으로 사용한다.
    • 따라서 static 멤버는 공용으로 사용되는것, 공통적인 변수이다.
    • 사용시 정적 멤버는 클래스 이름으로 접근: 클래스명.멤버
    public class StaticTestMain {
    
    		public static void main(String[] args) {
    			//static 멤버는 객체 생성없이 클래스 이름로 사용가능.
    			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 클래스: 상속 불가(이 클래스는 이게 끝. 상속한 하위 클래스 따위 만들지 않는다.)
  • 초기화 순서
  1. 선언문에서 할당 → 멤버변수 초기화 값 a=0;
  2. 초기화 블럭 → a=500'
  3. 생성자 → a = 1000;

결과 적으로 가장 마지막 순서의 값이 들어가서 a = 1000; 이 된다!

즉, class 안의 static 멤버변수는
main 메소드 안에서
class이름.


  • 싱글톤
    : 생성자를 private로 하여 클래스 밖의 객체 생성을 막고 내부에서 생성한 객체를 공용으로 사용하는 기법.
    • 보통 자원 관리를 위해 이 기법을 사용한다.
    • 내부에서 생성한 객체를 외부에 전달하는 기능의 .getInstance() 메서드를 제공해야한다.

메서드는 보통 public을 붙여준다.

0개의 댓글