정적(Static)은 '고정된'이라는 의미
정적 멤버
- 클래스에 고정된 멤버
- 객체를 생성하지 않고 사용할 수 있는 필드와 메서드
- 필드 : 정적 필드
- 메서드 : 정적 메서드
- 객체가 없어도 클래스 별 메모리에 할당 됨.
정적 멤버 선언
- 정적 필드와 정적 메서드를 선언하려면, 필드와 메서드 선언 시 Static키워드를 붙이면 된다.
-
public class 클래스 { // 정적 필드 static 타입 필드 [= 초기값]; // 정적 메서드 static 리턴타입 메서드 ( 매개변수 선언, ... ) { ... } }
-
- 클래스 로더가 클래스(바이트코드)를 로딩해서 메서드 메모리 영역에 적재할 때, 클래스 별로 관리 된다.
- 정적 멤버는 클래스에 고정된 멤버이기 때문.
- 인스턴스 멤버는 객체가 생성될때마다 새로운 메모리공간(주로 Heap)에 객체별로 관리된다.
- 각 인스턴스는 고유한 값을 가지게 된다.
- 어떤 객체라도 "공통된" 또는 "변하지 않는" 또는 "객체마다 가지고 있을 필요가 없는" 공용 데이터는 정적 필드로 선언하는 것이 좋다.
- ex) Circle 클래스에서 원의 넓이와 둘레를 구하는 메서드를 제공 중이다.
- 이 때, 반지름(radius)필드 값은 원의 객체마다 다르지만 파이(π)는 모든 원 객체가 동일하다.
-
public class Circle { int radius; static double pi = 3.14159; }
-
- 이 때, 원의 넓이와 둘레를 구하는 방법(메서드)는 모든 원 객체가 동일하다.
-
public class Circle { int radius; static double pi = 3.14159; static double getArea(int radius) { return pi * radius * radius; } static double getRound(int radius) { return 2 * pi * radius; } }
-
- 이 때, 반지름(radius)필드 값은 원의 객체마다 다르지만 파이(π)는 모든 원 객체가 동일하다.
- ex) Circle 클래스에서 원의 넓이와 둘레를 구하는 메서드를 제공 중이다.
정적 멤버 사용
클래스.필드;
클래스.메서드( 파라미터 값, ...);
주의 사항
객체가 없어도 사용가능하기 때문에, 정적 메서드 내부에 인스턴스 필드나 인스턴스 메서드를 사용할 수 없다.
반응형
'Programming Language > JAVA' 카테고리의 다른 글
[JAVA] for문 vs .stream() 비교 (4) | 2024.11.13 |
---|