상세 컨텐츠

본문 제목

자바 객체지향 프로그래밍 - 8 [static]

JAVA

by 덴마크 당나귀 2022. 12. 23. 11:55

본문

728x90

static 변수

여러 인스턴스가 하나의 값을 공유할 필요가 있음

 

static 변수 <- 인스턴스 1, 인스턴스 2, 인스턴스 3 모두 하나의 값을 사용해서 호출하는 값들이 같은 값을 사용

 

static 변수는 처음 프로그램이 로드 될 때 데이터 영역에 생성 됨.(new로 생성자를 만들 때 생기는게 아님.)

인스턴스의 생성과 상관없이 사용할 수 있으므로 클래스 이름으로 참조가능

예를 들면, Student.serialNum = 100; 이렇게 사용 가능

클래스 변수, 정적 변수라고도 함.

 

이렇게 1000으로 static변수를 선언했을 때, 실제로 생성자를 호출할 때 serialNum++; 을 해서 확인을 할 수 있는데, 이를 통해 새로 생기는 값인지 아니면 공유되는 값인지 확인하기 위해 테스트 해보면, 

 

 

이런식으로, 테스트를 해보면

이렇게 기본값으로 설정해둔 1000에서프로그램 실행을 통해 1001, 1002가 된것을 확인할 수 있는데 같은 메모리를 바라본다는 것을 알 수 있다.

 

앞서 말했듯이, static 변수는 인스턴스의 생성과는 상관이 없는데, 단순히 '클래스명.static변수명' 이렇게 호출할 수 있다.

이런 특징 때문에, 클래스 변수라고 한다.

 

 

static 메소드

 

- static 병수를 위한 기능을 제공하는 static 메소드

- static 메서드에서는 인스턴스 변수를 사용할 수 없음

- 클래스 이름으로 참조하여 사용하는 메서드

    Student.getSerialNum();

- 클래스 메서드, 정적 메서드라고도 한다.

 

public static int getSerialNum() {
    int i = 0;
    studentName = "lee";
    return serialNum;
}

 보통은 스태틱 변수를 아무데서나 호출해서 공유되는 값을 바꿀 수 없게 하기 위해 private이라고 변수를 선언하고 public으로 메소드를 빼는데, 앞서 말했듯이 static은 인스턴스가 생성될 때(new) 생기는 변수가 아니므로, static 메소드 안에서 변수 메모리는 호출할 수 없음. 위 코드를 보면 studentName = "lee"; 이렇게 선언되어 있는 부분은 틀린 부분이다. 

 

 반대로 static 변수는 일반 메소드에서 사용할 수 있다. 인스턴스 생성과는 별개로 존재하기 때문.

 

 

 

 

728x90

관련글 더보기