-
학원 DAY12. STATIC기록 2022. 10. 1. 23:41
static변수와 static 메소드
정적 필드와 정적 메소드라고 부른다.
객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버다. 객체 생성에 참여하지 않는다. 생성된 객체에 포함되어 있지 않다.
클래스의 로딩이 끝나면 정적변수와 정적메소드는 즉시 사용할 수 있다. 프로그램이 종료될 때까지 유지된다.
클래스 이름으로 식별되는 공간이 만들어지기 때문에 클래스 변수, 클래스 메소드라고도 부른다.
사용시에는 '클래스이름.변수이름', '클래스이름.메소드이름(인자, 인자, ..)'와 같이 앞에 클래스이름을 붙인다.
정적변수는 모든 생성자, 모든 멤버 메소드, 모든 정적 메소드에서 사용 가능하다.
정적변수는 상수를 정의할 때 주로 사용한다. 상수(final)는 한번 정해진 값을 변경할 수 없는 저장소다. 관례에 따르면, 상수는 변수명을 전부 대문자로 적는다. ex. static final double PI = 3.14;
최초의 값을 못바꾸게 할 때에도 final을 쓴다. 따라서, 정적변수가 아닐 때에도 final을 붙이기도 한다. 그런데 정적변수이면 보통은 상수이다.
정적메소드는 여러 객체에서 광범위하게 사용되는 유용한 기능을 정의할 때 사용한다.
객체의 고유한 속성, 객체마다 다른 값 -> 멤버변수
여러 객체에서 모두 같은 값. 상수 -> static변수
정적메소드는 유틸리티 클래스에서 주로 사용한다.
(유틸리티 클래스는 멤버변수와 상호작용없이 여러 객체에서 사용되는 기능들이 정의되어 있는 클래스이다.
대표적으로, java.lang.Math, java.util.Arrays가 있다.)
정적메소드 안에서는 멤버변수와 멤버메소드는 사용불가!
왜? 정적메소드 자신이 사용가능한 시점에 멤버변수, 멤버메소드가 생기지 않았으니까.
멤버 메소드의 블록에서는 멤버변수, 클래스변수, 멤버메소드, 정적메소드 모두 사용가능!
왜? 객체가 생성되려면 클래스가 메모리에 로딩되었을 것이다. 그러면 정적변수, 정적메소드도 만들어져 있을 것이기 때문.
'기록' 카테고리의 다른 글
학원 DAY12. 클래스와 클래스의 관계, 상속 (0) 2022.10.02 학원 DAY12. 변수의 종류 (0) 2022.10.01 학원 DAY10~11. Getter, Setter 메소드 (0) 2022.10.01 학원 DAY10. this() (0) 2022.09.26 학원 DAY10. this (0) 2022.09.26