본문 바로가기
Java/Basic

static

by o3oppp 2024. 12. 8.
멤버 변수(필드)의 종류
public class TempData {
    public String name; 	// 인스턴스 변수
    public static int count;    // 클래스 변수 = static 변수 = 정적 변수
}
  • 인스턴스 변수 : static이 붙지 않은 멤버 변수
    •  static이 붙지 않은 멤버 변수는 인스턴스를 생성해야 사용 가능
    • 인스턴스 변수는 인스턴스를 만들 때 마다 새로 만들어짐
  • 클래스 변수 : static이 붙은 멤버 변수
    • 클래스 변수, 정적 변수, static 변수등으로 부름
    • static이 붙은 멤버 변수는 인스턴스와 무관하게 클래스에 바로 접근하여 사용 가능
    • 클래스 변수는 자바 프로그램을 시작할 때 딱 1개만 생성
    • 인스턴스와는 다르게 여러곳에서 공유하는 목적으로 주로 사용
    • 인스턴스 변수는 힙 영역에 동적으로 생성되고 제거되는 반면, static 변수는 프로그램 실행 시점에 만들어지고, 종료 시 제거되기 때문에 정적인 성질을 가지므로 정적 변수

변수와 생명주기
  • 지역 변수(매개변수 포함)
    • 스택 영역에 있는 스택 프레임 안에 보관
    • 메서드가 종료되면 스택 프레임도 제거 되는데 이때 해당 스택 프레임에 포함된 지역 변수도 함께 제거
    • 따라서 지역 변수는 생존 주기가 짧음
  • 인스턴스 변수
    • 인스턴스에 있는 멤버 변수를 인스턴스 변수라 함
    • 인스턴스 변수는 힙 영역을 사용
    • 힙 영역은 GC(가비지 컬렉션)가 발생하기 전까지 생존하기에 보통 지역 변수보다 생존 주기가 김
  • 클래스 변수
    • 메서드 영역의 static 영역에 보관되는 변수
    • 클래스 변수는 해당 클래스가 JVM에 로딩 되는 순간 생성되며 JVM이 종료될 때 까지 생명주기가 이어짐으로 가장 긴 생명주기를 가짐

메서드의 종류
public class TempMethod {
    public String deco1(String str){ // 인스턴스 메서드
        return result + "!";
    }
    
    public static String deco2(String str){ // 클래스 메서드
        return result + "!";
    }
}
  • 인스턴스 메서드 : static이 붙지 않은 메서드로 인스턴스를 생성해야 호출 가능
  • 클래스 메서드 : static이 붙은 메서드로 정적 메서드 또는 클래스 메서드라고 함

정적 메서드 특징
  • static메서드는 static만 사용할 수 있음
    • 클래스 내부의 기능을 사용할 때, 정적 메서드는 static이 붙은 정적 메서드나 정적 변수만 사용할 수 있음
    • 클래스 내부의 기능을 사용할 때, 정적 메서드는 인스턴스 변수나 인스턴스 메서드 사용 불가(컴파일 오류 발생)
    • 대표적인 정적 메서드는 main()
    • 참고
      1. 하나의 자바 파일에 public 클래스는 하나만 존재 가능
      2. 정적 메서드는 정적 메서드만 호출 가능하므로 main 내 다른 클래스는 모두 정적 메서드로 선언
  • 반대로 모든 곳에서 static을 호출할 수 있음
    • 정적 메서드는 공용 기능으로 접근 제어자만 허락한다면 클래스를 통해 모든 곳에서 static을 호출 가능
  • 접근법
    • 인스턴스를 통한 접근 : data.call()
    • 클래스를 통한 접근 : Data.call()
    • 정적 메서드를 자주 호출해야 한다면 staic import 기능 사용

정적 메서드가 인스턴스의 기능을 사용할 수 없는 이유

  • 특정 인스턴스의 기능을 사용하려면 참조값을 알아야 함
  • 정적 메서드는 클래스의 이름을 통해 바로 호출할 수 있으므로 인스턴스처럼 참조값의 개념이 존재하지 않아 인스턴스 변수나 인스턴스 메서드를 사용할 수 없음

'Java > Basic' 카테고리의 다른 글

다형성과 메서드 오버라이딩  (0) 2024.12.31
instanceof  (0) 2024.12.31
다형성과 캐스팅  (0) 2024.12.30
상속  (0) 2024.12.12
메모리 구조  (2) 2024.12.08