패스트캠퍼스 백엔드 부트캠프 3기/JAVA

[JAVA] static 키워드

hail2y 2024. 12. 30. 15:58

static 키워드는 블록, 변수, 메서드, 클래스에 붙일 수 있다. 

 

The static keyword in Java is used to share the same variable or method of a given class. ... . The static keyword belongs to the class rather than an instance of the class. The static keyword is used for a constant variable or a method that is the same for every instance of a class. ...  helps create class-level variables and methods.

 [출처: https://www.geeksforgeeks.org/static-keyword-java/]

 

위 정의를 보면 알 수 있듯이 static 키워드는 주로 공용 부분에 적용할 때 사용된다. 즉, 클래스의 각각의 인스턴스보다는 클래스와 인스턴스 전체에 모두 똑같이 적용하고자 할 때 사용된다. 

static 변수(클래스 변수)

 

클래스 변수와 인스턴스 변수는 카드 객체를 예로 들었을 때 다음과 같이 구분할 수 있다. 위에서 언급했던 것처럼 객체는 속성과 기능을 가지고 있는데, 먼저 카드 객체에서 속성을 생각해 보면 무늬, 숫자, 폭, 높이 등을 떠올릴 수 있다. 여기서 더 구체화 해보면 이 속성들 가운데 카드들이 공유하고 있는 공통적인 속성과, 또 따로 구분되는 개별적인 속성이 있다는 것을 알 수 있다. 이 공통적인 부분을 cv, 즉 클래스 변수로 분류하고, 개별적인 부분을 iv, 즉 인스턴스 변수로 분류한다. 

속성 무늬, 숫자... 개별(객체마다 다르게 유지) iv
  폭, 높이... 공통(모든 객체 공통) cv
기능 ... ... ...

 

객체가 생성되면 객체 내 각각의 인스턴스 변수들이 생성되는데 이들은 하나의 참조변수를 통하여 접근한다. (ex. p.shape, p.number) static 변수는 공통적인 속성이라고 말한 것처럼 객체가 생성됨에 따라 각각 생성되는 것이 아니라 클래스 영역에서 공통적으로 관리한다. 이들도 개별 인스턴스에서 똑같이 접근할 수 있지만 클래스 변수라는 점을 명확히 하기 위해 클래스 이름으로 접근하는 것이 권장된다. 그래서 클래스 변수는 객체 생성 없이 접근 가능하다.

 

static 메서드(클래스 메서드) vs. 인스턴스 메서드

  static 메서드 인스턴스 메서드
객체 생성 유무 X O
iv 사용 여부 X O

 

사실 위 기준들은 같은 말이다. iv는 인스턴스 변수이니 객체를 생성해야지 변수가 생기고 변수가 생겨야 사용 가능하니 맥락이 같다. 그렇기 때문에 static 메서드에 'X'라고 쳐 놓은 것처럼 이것은 객체를 필요로 하지 않고 클래스 이름을 통해 호출이 가능하다. 위 static 변수 설명과 같다. ex. Math.random() 

static 키워드를 언제 붙일까?

 

"다시 정리를 해 보자면" static 키워드는 언제 붙여야 할까? 여태 static에 대해서 알아보았지만 막상 한 줄 정리를 하려니 머리가 하얘진다. 사실 별 거 없는데도... 간단한 프로젝트를 할 때 사람들이 static 키워드를 붙여서 작업하는 걸 종종 봤는데 그때마다 나는 static으로 처리를 하는지 이해가 잘 되지 않았다. 그래서 이번에 강의 들을 때 이 부분을 가장 흥미있게 들었다. static 개념만 잘 떠올리면 어려울 건 없겠지만 나중에 또 기억나지 않을 순간을 위해 가장 본질적인 부분만 챙겨서 다시 정리해 본다.

  • 속성 중에서 공통 속성에 static을 붙인다
  • 인스턴스 멤버(인스턴스 변수, 인스턴스 메서드)를 사용하지 않는 메서드에 static을 붙인다
  • 객체가 필요하지 않는 경우, iv 대신 lv로 처리하는 경우 static을 붙인다

https://www.youtube.com/watch?v=Fl4TzjPKAMU
https://www.youtube.com/watch?v=Fl4TzjPKAMU