[Java 객체지향] Static 메서드

2022. 1. 27. 18:10·Java & Kotlin

Static 메서드

  • 메서드가 수행되려면 메서드 내부에 있는 변수들은 메모리가 할당된 상태여야 한다.
  • 인스턴스 변수는 인스턴스 생성이 완료되어야 메모리에 할당된다.
  • static 메서드는 인스턴스가 생성되기 전, 프로그램이 로드되는 시점부터 사용될 수 있다.
  • 따라서 static 메서드에서는 생성이 완료되지 않은 인스턴스 변수(멤버 변수)를 사용할 수 없다.
  • 하지만 static 변수는 이미 존재하므로 일반 메서드 안에서의 사용이 가능하다.

 

Employee.java의 static 메서드 getSerialNum()
  • 메서드 내에서 생성된 지역변수는 사용하는데 문제가 없다.
public static int getSerialNum() {
	int i = 0;	// 메서드 내부에 선언된 지역변수. 메서드 호출시 생성 & 완료시 소멸
 	
    employeeName = "Lee";	// 메서드 호출 시점에 employeeName 변수가 존재하지 않을 수 있음.
}

 

static 메서드의 참조
  • 역시 클래스 이름으로 참조할 수 있다.
System.out.println(Employee.getSerialNum());

 

상황에 따른 적절한 변수 사용이 중요하다

  • 변수의 유효 범위(scope)와 생성과 소멸 시점(life cycle)은 변수의 종류(지역 변수, 멤버 변수, static 변수)에 따라 다르다.
  • 멤버 변수가 많은 클래스는 인스턴스 생성 시 많은 메모리를 차지할 수 있으므로 좋은 클래스는 아니다.
  • 하지만 멤버 변수가 없으면 필요할 때마다 함수 간 매개 변수를 통해 전달해야 하고 외부에서도 사용하는 것이 어려울 수 있다.
  • 따라서 클래스의 속성에 맞는 적절한 개수의 멤버 변수를 설정하는 것이 중요하다.
  • 클래스 내부에서 여러번 사용되는 변수를 멤버 변수로 설정해야 한다.
  • static 변수는 메모리에 로드되는 시점부터 언로드 될 때까지 메모리를 차지하므로 크기가 큰 배열같은 element는 static 변수로 설정하는 것은 좋지 않다.
  • 모든 static 변수를 private으로 설정하지는 않고 인스턴스간 공유할 필요가 있는 변수는 public으로 설정한다.

 

변수 유형 선언 위치 사용 범위 메모리 생성과 소멸
지역 변수
(로컬 변수)
함수 내부 함수 내부에서만 사용 스택 함수가 호출되는 시점에 생성되고 함수가 끝나면 소멸한다.
멤버 변수
(인스턴스 변수)
클래스 멤버 변수로 선언 클래스 내부에서 사용, private이 아니면 참조 변수로 다른 클래스에서 사용 가능 힙 인스턴스가 생성될 때 생성되고, Garbage Collector가 메모리 수거할 때 소멸된다.
static 변수
(클래스 변수)
static 키워드를 사용하여 클래스 내부에 선언 클래스 내부에서 사용, private 아니면 클래스 이름으로 다른 클래스에서 사용 가능 데이터 영역 프로그램이 처음 시작할 때 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸된다.

 

컴파일 언어들은 비슷하기 때문에 C, C++, C##과 같은 다른 언어를 이해하는데도 도움이 되므로 잘 알아놓으면 좋다!

 

 

저작자표시 비영리 변경금지 (새창열림)

'Java & Kotlin' 카테고리의 다른 글

[Java 객체지향] Singleton Pattern (static 응용)  (0) 2022.01.27
[Java 객체지향] Static 변수  (0) 2022.01.27
[Java 객체지향] 객체 간 상호작용 구현해보기  (0) 2022.01.26
'Java & Kotlin' 카테고리의 다른 글
  • [Java 객체지향] Singleton Pattern 응용 문제
  • [Java 객체지향] Singleton Pattern (static 응용)
  • [Java 객체지향] Static 변수
  • [Java 객체지향] 객체 간 상호작용 구현해보기
Sue
Sue
개발 공부 로그
  • Sue
    Sue's devlog
    Sue
  • 전체
    오늘
    어제
    • 분류 전체보기 (122)
      • Algorithm (2)
      • WEB (8)
      • Java & Kotlin (83)
      • Spring (26)
      • Database (1)
      • Infra (0)
      • Git (1)
      • devlog (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Sue
[Java 객체지향] Static 메서드
상단으로

티스토리툴바