[JAVA] static

YounDitt·2020년 9월 24일
0

Static 키워드

  • "공유"의 개념을 담은 키워드이다.
  • 클래스의 필드와 메소드에 적용될 수 있다.
    • 클래스 변수(static field)
    • 클래스 메소드(static method)

동작

  • 클래스가 메모리상에 올라갈때 로딩된다.

Instance

  • 인스턴스 변수는 인스턴스마다 다른 값을 갖기 때문에 하나의 클래스를 여러개의 인스턴스로 만들어서 사용할 수 있다는 장점이 있다.

클래스(static) 변수 vs 인스턴스 변수

  • 클래스 변수
    • 클래스 영역에 존재한다.
    • 객체 외부에 존재해 여러 객체가 공유할 수 있다.
  • 인스턴스 변수
    • 객체 내부에 존재한다.

클래스(static) 메소드 vs 인스턴스 메소드

  • 클래스 메소드
    • 주체 객체 없이 실행된다.
    • 간편한 기능 구현에 좋다.
    • Math.random();
  • 인스턴스 메소드
    • 주체 객체를 통해 실행된다.
    • 특정 객체의 동작 구현시 사용한다.
    • myClass.study();

주의사항

  • static함수 내에서는 static멤버만 사용할 수 있다.
  • this 호출이 불가능하다.

🙋‍♀️static은 상속이 가능할까?

상속이 불가능하다.

  • static은 컴파일 되는 시점에 결정되지만, override는 런타임 시점에 결정된다.
  • 또한 static은 클래스단위로 생성되기 때문에 객체 단위로 생성되는 override에서 재정의는 불가하다.

🙋‍♀️Context, View를 static으로 관리하면 왜 위험할까?

Android App은 Context단위로 메모리를 관리한다. context를 static으로 선언할 경우, 해당 activity가 destroy되어도 gc가 static멤버때문에 되지 않을 수 있어 위험하다.

참고 1

profile
Hello, Android

0개의 댓글