※출처
https://fastcampus.co.kr/dev_online_javaend
https://mangkyu.tistory.com/47
https://dev-coco.tistory.com/23
static메서드는 객체의 생성 없이 호출이 가능- 객체에서는 호출이 가능하지만 지양한다.
- 일반적으로 유틸리티 관련 함수는
static메서드로 구현하는 것이 적합 - 대표적인
Util Class는java.util.Math가 있다.
static 메서드(Class Mathod)에서는 인스턴스 변수를 사용할 수 없다.
static메서드는 인스턴스 생성과 무관하게 클래스 이름으로 호출 될 수 있음- 인스턴스 생성 전에 호출 될 수 있으므로
static메서드 내부에서는 인스턴스 변수의 사용을 허용하지 않음 - 인스턴스 변수 · 메서드에선
static이 붙은 멤버들을 사용하는 것은 가능하다.
변수의 유효 범위와 메모리
- 변수의 유효 범위(scope)와 생성과 소멸(life cycle)은 각 변수의 종류마다 다름
- 지역변수, 멤버 변수, 클래스 변수는 유효 범위와
life cycle, 사용하는 메모리도 다름
| 변수 유형 | 선언 위치 | 사용 범위 | 메모리 | 생성과 소멸 |
| 지역 변수 (로컬 변수) |
함수 내부에 선언 | 함수 내부에서만 사용 | 스택 | 함수가 호출될 때 생성되고 함수가 끝나면 소멸함 |
| 멤버 변수 (인스턴스 변수) |
클래스 멤버 변수로 선언 | 클래스 내부에서 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용 가능 | 힙 | 인스턴스가 생성될 때 힙에 생성되고, Garbage Collector가 메모리를 수거할 때 소멸 됨 |
| static 변수 (클래스 변수) |
static 예약어를 사용하여 클래스 내부에 선언 | 클래스 내부에서 사용하고 private이 아니면 클래스 이름으로 다른 클래스에서 사용 가능 | 데이터 영역 |
프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸 됨 |
static변수는 프로그램이 메모리에 있는 동안 계속 그 영역을 차지하므로 너무 큰 메모리를 할당하는 것은 좋지 않음- 클래스 내부의 여러 메서드에서 사용하는 변수는 멤버 변수로 선언하는 것이 좋음
- 멤버 변수가 너무 많으면 인스턴스 생성 시 쓸대없는 메모리가 할당됨
- 상황에 적절하게 변수를 사용해야 함
'Java > 객체지향 프로그래밍' 카테고리의 다른 글
| JAVA / 객체 배열 사용하기 (0) | 2022.06.20 |
|---|---|
| JAVA / static 응용 - 싱글톤 패턴(singleton pattern) (0) | 2022.06.17 |
| JAVA / static 변수 (0) | 2022.06.16 |
| JAVA / 객체 간의 협력(Collaboration) (0) | 2022.06.15 |
| JAVA / 객체 자신을 가리키는 this (0) | 2022.06.15 |