[JAVA]Static
카테고리: JAVA
[15] Static
15.1. 스태틱(static)의 구조
- 프로그램 시작 전 로드, 프로그램 종료 시 소멸
- 코드가 메서드 영역에 로드되는 과정에서 static으로 지정된 변수와 메서드는 메서드 영역 내의 스태틱 영역으로 이동
15.2. static 변수
- 여러 인스턴스에서 공통으로 사용할 변수가 필요한 경우 사용
- 여러 인스턴스가 공유하는 기준 값이 필요한 경우 사용
- ex) static 변수의 예 ```
- 학생마다 새로운 학번 생성
- 새로운 카드를 발급할 때마다 새로운 카드 번호 부여
- 사원이 입사할 때마다 새로운 사번이 필요한 경우 ```
- 모든 객체가 접근 및 사용 가능
- 전역(Global) 변수
- 클래스 변수, 정적 변수 (↔ 인스턴스 변수)
- 인스턴스 생성과 무관하게 사용할 수 있어 클래스명으로 직접 참조 권장
- 유의사항
- 프로그램이 메모리에 있는 동안 할당된 영역을 계속 점유함
- 너무 큰 메모리를 할당하는 것은 지양해야 함
- 클래스 내 여러 메서드에서 사용하는 변수는 멤버변수로 선언하는 것이 권장
- 멤버변수가 너무 많으면 인스턴스 생성시 쓸데없는 메모리가 할당되므로 상황에 유의
15.3. 변수의 유형
변수 유형 | 선언위치 | 사용범위(Scope) | 메모리 | 생성과 소멸 (life cycle) |
---|---|---|---|---|
지역 변수(로컬 변수) | 메서드 내부 | 메서드 내부에서만 | Stack | 메서드가 호출될 때 생성되고 메서드가 끝나면 소멸 |
멤버 변수(인스턴스 변수) | 클래스 내부 | 클래스 내부에서 사용. private 또는 참조변수를 통해 다른 클래스에서 사용 가능 | Heap | 인스턴스가 생성될 때 힙에 생성되고, Garbage Collector가 메모리를 수거할 때 소멸 |
static 변수(클래스 변수) | 클래스 내부 | 클래스 내부에서 사용. private 또는 클래스명을 통해 다른 클래스에서 사용 가능 | Method Area | 프로그램이 처음 시작할 때 상수와 함께 데이터(메서드) 영역에 생성되고, 프로그램을 끝낼 때 메모리 해제와 함께 소멸 |
15.4. 싱글톤 패턴(Singleton Pattern)
- 용도
- 클래스의 인스턴스가 오직 하나임을 보장하며, 해당 인스턴스로 접근할 수 있는 방법을 제공하는 패턴
- 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴.
- 구현하기
- static 변수, 메서드를 활용하여 구현 가능
- 클래스의 인스턴스는 단 하나이며, 접근 방법 또한 하나로만 통일하여 제공.
- 클래스 다이어그램을 통해 표시
- 회사 객체 구현하기
- 생성자 : private
- 클래스 내부에 유일한 private 인스턴스 생성
- 외부에서 유일한 인스턴스를 참조할 수 있는 public 메소드 제공
댓글 남기기