15강. 클래스와 객체2(3) - static 변수

  • Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
  • Section 1. 자바의 핵심 - 객체지향 프로그래밍
  • 15강 "클래스와 객체2(3) - static 변수"
  • static 변수 > static 메서드 > 변수의 유효 범위

static 변수

  • static 변수는 자료형 앞에 static 예약어를 써서 사용하며, 여러 개의 인스턴스가 같은 메모리의 값을 공유하기 위해 사용한다.
  • static 변수는 heap 메모리가 아닌 다른 영역(데이터 영역 메모리)에 저장되고, 프로그램이 메모리에 적재(load)될 때 값이 할당된다. (인스턴스는 new 키워드로 객체가 생성될 때 heap 메모레어 할당되고, 객체가 소멸되면 사라진다.)
  • 따라서 인스턴스의 생성과 관계없이 클래스 이름으로 직접 참조한다.
  • static 변수는 클래스 변수라고도 한다. (멤버변수는 인스턴스 변수라고도 한다.)

static 메서드

  • 클래스 메서드 라고도 한다.
  • 메서드에 static 키워드를 사용해서 구현한다.
  • 주로 static 변수를 위한 기능을 제공한다.
  • static메서드는 멤버변수보다 먼저 생성되므로 static메서드 안에서는 멤버변수를 사용할 수 없다. (지역변수는 사용 가능)
  • 인스턴스의 생성과 관계 없이 클래스 이름으로 직접 메서드를 호출한다.

아래는 Student 객체를 생성할 때마다 studentID가 1씩 증가하여 대입되도록 만든 코드이다.

public class Student {
	//객체가 생성될 때만 값이 변화해야 하므로 private으로 static변수 선언
	private static int serialNum = 10000;
	
	int studentID;
	String studentName;
	
	//객체 생성 시 serailNum이 증가하고 그 값을 studentID에 대입
	public Student() {
		serialNum++;
		studentID = serialNum;
	}

	//static메서드로 static변수를 반환
	public static int getSerialNum() {
		return serialNum;
	}
}
public class StudentTest1 {
	public static void main(String[] args) {
		//객체 생성 전에 static 변수 값 확인
		System.out.println(Student.getSerialNum());
		
		//객체 생성하여 static 변수 값 확인
		Student studentLee = new Student();
		System.out.println(studentLee.getSerialNum());
		
		Student studentSon = new Student();
		System.out.println(studentSon.getSerialNum());
	}
}

  • static변수와 static메서드는 객체가 생성되기 전에 이미 데이터 영역에 할당되어 있기 때문에
    객체 생성 전에 Student.getSeiralNum()으로 serialNum의 값을 확인할 수 있다.
  • studentLee가 생성될 때 serialNum이 1 증가하였고, studentSon이 생성될 때 이미 1 증가한 serialNum이 다시 1이 증가한 것을 확인할 수 있다.

변수의 유효 범위

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

좋은 웹페이지 즐겨찾기