Code&Data Insights
[ Java Programming ] Static 개념 끝내기 ( Variables & Static Methods ) 본문
[ Java Programming ] Static 개념 끝내기 ( Variables & Static Methods )
paka_corn 2022. 7. 18. 08:55[ Static Variables & Static Methods ]
계속 헷갈렸던 Static,
What does "Static" mean?
=> 자바에서는 객체를 필요할 때마다 메모리에 올려 사용한다. Static은 프로그램의 객체 생성 이전 JVM에 의해 클래스가 load되는 순간에 자동으로 메모리에 올라간다.
=> 객체 생성 이전에 이미 로딩되는 메모리이기 때문에, non-static 영역(객체 영역)으로는 접근이 불가능하다.
< Static Variables = Class Variables >
Variables(변수)에는 instance variables(iv)과 class variables(cv)- static 이 존재한다.
=> instance variables은 개별 속성(객체마다 다르게 가져야 하는 값), class variables은 공통 속성을 표현 할 때 사용된다.
class variables(static variables) : global variables(전역 변수)이다.
=> the same across all instances of the class
=> 객체 레벨로 접근하지 않고, 클래스 레벨로 접근한다. ( 어느 곳에서 접근을 해도 동일한 값을 가지고 있다. )
< Static Methods >
Methods: A method is a block of code that only runs when called.
- Methods can pass data, known as parameters, into a method.
- 작업 단위로 문장들을 묶어 이름 붙인 것 --> 코드의 간결화 / 중복 제거 / 관리 용이 / Method 재사용(호출) 가능
- 객체 지향 개념에서 사용되는 함수(functions)을 지칭
- Method는 클래스 영역에만 정의가 가능
- Method 하나에 기능 하나만 포함
Static Methods
=> Method를 사용하기 위해 객체 생성이 필요하지 않다
=> Instance Variables을 사용하지 않는 method (! iv를 사용할 수 없음 !)
=> Instance method는 instance variables, class variable 모두 호출 가능
단! 객체 생성 후
(--> instance method는 객체 생성 후 호출 가능하기 때문에,
instance method 내에 사용된 iv또한 객체 생성으로 사용가능해진 것 )
==> But, Static Method는 객체 생성 없이 사용 가능하지만 ONLY class variable만 호출 가능하다.
==> Static Method는 Instance method도 호출 할 수 없다!
(반면, instance method는 static method를 호출 할 수 있음. )
WHY?
-> Static method가 instance member(instance variables/instance method)를 쓸 수 없는 이유는, static method 호출 시에 Object가 생성(존재) 되기 전 일 수도 있음. static은 class loader상태에 이미 메모리에 올라가 있기 때문에, 언제나 사용 가능한 것.
====> 간단히 말하자면, Static variable(Class variable)과 Static method는 클래스 어디에서나 호출,사용이 가능하다 (전역변수 / 객체 생성이 필요하지 않기 때문 )
'Computer Science > Java Programming' 카테고리의 다른 글
[Java Programming] Exception Handling (Checked Exception | Unchecked Exception) (0) | 2022.07.24 |
---|---|
[ Java Programming ] StringBuffer class & StringBuilder class (0) | 2022.06.15 |
[ Java Programming ] Interface와 Abstract의 차이점 (0) | 2022.06.09 |
[ Java Programming ] LinkedList / LinkedList vs ArrayList (0) | 2022.06.02 |
[ Java Programming ] Recursion (0) | 2022.04.19 |