static 메서드의 구현과 활용

kangsun lee·2023년 3월 20일
0

Java

목록 보기
43/44

  • serialNum static변수를 private으로 설정한다.
  • 외부에서 값을 변경시키면 문제가 되기 때문에 getter만 생성해준다.

  • privat으로 선언된 static을 호출할 땐 클래스 이름get-을 사용해서 불러온다.



static 메서드(클래스 메서드)에서는 인스턴스 변수를 사용할 수 없다.


  • static 메서드는 인스턴스 생성과 무관하게 클래스 이름으로 호출 될 수 있음
  • 인스턴스 생성 전에 호출 될 수 있으므로 static 메서드 내부에서는 인스턴스 변수를 사용할 수 없음

- 여기서 인스턴스 변수는 일반 멤버변수를 말한다.
- static 메서드는 인스턴스 생성과 무관하게 클래스 메서드로 사용할 수 있기때문에 인스턴스를 생성하지 않고 클래스명으로 static 메서드를 사용할 때 멤버변수를 참조하려하는 것은 불가능하다. 멤버변수를 사용하기 위해선 따로 인스턴스를 생성해줘야한다.

  • static 메서드는 클래스 메서드이기때문에 클래스명 만으로 호출될 수 있으므로 인스턴스 생성이 되어있지 않으면 멤버변수를 사용할 수 없다.
  • employeeName 은 멤버변수이므로 인스턴스를 생성해주어야만 사용할 수 있는 변수이다.
  • 그 반해 일반 메서드에서 static 변수를 사용하는 것은 아무 문제가 되지 않는다.
    → static 변수는 메모리가 로드되는 순간 생성되기 때문에 일반 메서드에서 사용할 수 있는 것~_~
    ** static 은 메모리가 로드될 때 먼저 생기고, 멤버변수는 힙메모리로 인스턴스가 생성될 때 만들어진다. 메모리가 생성되는 순서를 떠올리면서 이해하면 쉽다!



변수의 유효 범위와 메모리


  • 변수의 유효 범위(scope)와 생성과 소멸(life cycle)은 각 변수의 종류마다 다름
  • 지역변수, 멤버 변수, 클래스 변수는 유효범위와 life cycle, 사용하는 메모리도 다름
  • static 변수는 프로그램이 메모리에 있는 동안 계속 그 영역을 차지하므로 너무 큰 메모리를 할당하는 것은 좋지 않음 (큰 배열 같은 것은 static 변수로 사용하는 것은 좋지 않다.)
  • 클래스 내부의 여러 메서드에서 사용하는 변수는 멤버 변수로 선언하는 것이 좋음
  • 멤버 변수가 너무 많으면 인스턴스 생성 시 쓸데없는 메모리가 할당됨
  • 상황에 적절하게 변수를 사용해야 함
profile
코딩 공부 💻

0개의 댓글