[Java] 클래스 멤버와 인스턴스 멤버(Static, Non-Static)

oneofakindscene·2021년 8월 27일
0

Java

목록 보기
2/12

클래스 멤버와 인스턴스 멤버

  • 클래스 맴버(Static 멤버라고도함) : 클래스 변수와 클래스 메소드 = 선언할 때 앞에 static이라고 붙은 경우
    • 또한, 클래스 변수는 전역변수라고 할 수 있음
  • 인스턴스 맴버(Unstatic 멤버라고함) : 인스턴스 변수와 인스턴스 메소드 = 선언할 때 앞에 static이라고 붙지 않은 경우
  • (참고) 전역변수 종류는 두가지로 인스턴스 변수(객체 변수), 클래스 변수(static 변수)가 있다
    • static int static_variable = 1; ⇒ 스테틱(클래스)변수 ⇒ 인스턴스 생성없이 클래스에서 바로 접근 가능
    • int instance_variable = 2; ⇒ 인스턴스 변수 ⇒ 인스턴스를 만들어야지만 생성됨

클래스 변수

클래스 변수의 용도를 정리해보면 아래와 같다.

  • 변수 앞에 static이라는 용어가 붙으면 클래스 변수이다

  • 클래스 변수는 인스턴스를 생성할 필요가 없는 값을 클래스에 저장하고 싶은 경우

  • 즉, 인스턴스 생성 없이 접근 가능

  • 인스턴스에 따라서 변하지 않는 값이 필요한 경우 (위의 예에서는 PI)(이런 경우 final을 이용해서 상수로 선언하는 것이 바람직 하지만 final을 아직 배우지 않았기 때문에 언급하지 않았다)

    • (참고) final : final은 (어떠한 경우에도) 상속/변경을 금지하는 규제다. <> abstract 반대 개념
  • 값의 변경 사항을 모든 인스턴스가 공유해야 하는 경우

클래스 메소드

  • 인스턴스를 만들지 않고 클래스 자체에서 method를 호출함
    즉, 클래스에 직접 접근해서 method 호출 가능
    • ex) Calculator3.sum(10, 20);
  • c1.setOprands(10, 20) => 이런건 c1이라는 인스턴스가 10, 20이라는 값을 지닐 필요가 있을때 인스턴스로 만들때 이값들도 넣어주는거라 보면 됨
  • 이와 달리, 클래스 메소드를 쓰는 경우는 일회성으로 특정 값을 가지고 method 활용하려고 할때 쓴다고 볼 수 있음
    • 이경우 굳이 메모리를 쓰면서 인스턴스를 만들지 않기 때문에 메모리가 절약된다고 볼 수 있음
  • 아래 스샷처럼 같은 클래스 내에서 static으로 method를 만들어주면 class이름.method 형식이 아니라 다이렉트로 method 사용 할 수 있음

클래스 vs 인스턴스 맴버들 간의 관계

  • 인스턴스 메소드는 클래스 맴버에 접근할 수 있다.
  • 클래스 메소드는 인스턴스 맴버에 접근할 수 없다.
    • 쉽게 생각해서 클래스는 인스턴스 만들지 않고 접근 가능하기때문에 인스턴스 멤버에서 클래스 멤버로 접근 가능.
    • 반대로 인스턴스는 클래스가 만들어진 다음에 만들어지기 때문에 ⇒ 클래스 멤버에서 인스턴스 멤버로 접근할 수 없다
  • 클래스를 만들고 ⇒ 이후에 인스턴스를 만들어짐.
    • 그렇기 때문에, 클래스 멤버는 이후에 만들어진 인스턴스멤버에는 접근하지 못한다
      • 1) 클래스 만들어지고 이후에 만들어 지는 것이기 때문에, 아직 안 만들어진 상태일 수 있고
      • 2) 어떤 인스턴스 인지 알 수 없음
  • 반대로 인스턴스가 만들어졌다는 거는 클래스가 만들어졌다는 것을 의미하기때문에 인스턴스 ⇒ 클래스로는 접근 가능

정리

  • 인스턴스 변수와 클래스 변수는 아래와 같이 부르기도 하기 때문에 아래와 같은 용어로 쓰여도 헷갈리지 말자
    • 인스턴스 변수 ⇒ Non-Static Field
    • 클래스 변수 ⇒ Static Field
    • 변수 <> Field 서로 대체 가능한 용어
  • 클래스 메소드를 인스텐스를 만들지 않기 때문에 일회성으로 특정 값을 가지고 method 활용하려고 할때 쓴다고 볼 수 있음 \Rightarrow 굳이 메모리를 쓰면서 인스턴스를 만들지 않기 때문에메모리가 절약된다고 볼 수 있음

References

profile
oneofakindscene

0개의 댓글