JAVA 정리노트

JAVA static과 객체배열에 대한 정리

Dodledd 2024. 1. 22. 17:50

static 변수란?

다른 이름으로 정적변수, 클래스 변수이다.

선언 방법은 static 을 붙여서 사용하면 되며 붙이는 순간 해당 클래스로 만든 모든 인스턴스가 공유할 수 있게되며

그 값은 고유해진다.

예를들어 생성자에 static을 선언한 경우, main문에서 new로 새로운 인스턴스를 만들 때 마다 그 값이 초기화된다.

또 static 변수는 달느 변수들과 다르게 처음부터 메모리 공간을 가지고 태어난다. 다른 참조 변수들은 new를 선언하고 가리키는 곳을 설정해줘야 데이터 공간이 부여되는 반면에 static 변수는 컴파일하면 바로 데이터 공간이 부여된다.

C로 설명하면 클래스에서 사용하는 전역변수 느낌인 것 같다.

또 접근할 때 new로 만든 이름으로 접근하는게 아니라 클래스 변수인 만큼 클래스명.static 변수 이름으로 접근하는게 국룰이다.

밑에는 static 메소드에 대한 설명이다

static 메소드 정적변수와 동일하게 고정메모리를 할당하고 클래스 이름으로

접근 가능하다. 다만 객체를 생성하지 않아도(new 생성자를 사용하지 않아도)

사용 가능하지만 static 메소드 안에는 static 변수만 사용 가능하다.

이유는 객체를 생성하지 않았기 때문에 일반변수는 사용 불가.

 

 

객체배열이란?

일반적으로 객체 + 배열이다.

선언법은 배열과 같지만 선언해야 할 것이 하나 더 있다.

만약 배열처럼 그냥 선언한다면 참조변수만 여러개 생기는 것이기 때문에 가리키는 값이 없는 null 상태이다.

그렇기 때문에 메모리 공간을 할당 해줘야한다.

 

Book 이라는 클래스가 있으면

Book[] userBook = new Book[3];

위 코드의 의미는 Book클래스로 userBook이란 이름의 객체를 가리키는 참조변수를 5개 만들었다.

하지만 메모리 공간이 할당되어 있는 상태가 아니라서 null이며 데이터를 넣고 생성자를 사용하여 객체로 만들어야한다.

userBook[0] =new Book ("홍길동", 29);

userBook[1] =new Book ("전우치", 39);

userBook[2] =new Book ("관우", 40);

 

이런식으로 값을 넣어줘서 하나의 객체배열로 만들 수 있으며 userBook[0]의 참조변수는 은 홍길동, 29세를 가지고 있는 객체 가리키고 있다고 보면 된다.