변수는 데이터를 저장하는 공간인데, 자바의 변수는 크게 멤버 변수와 로컬 변수로 나뉜다.
1. 로컬 변수 (Local Variable)
로컬 변수는 메서드 내부에서 선언되는 변수이다. 사용 범위 역시 메서드 내부에서만 유효하다. 사용하는 메모리는 stack 메모리이며, 메서드가 호출될 때 생성되었다가 끝나면 소멸한다.
2. 멤버 변수 (Member Variable)
클래스 내부에 선언하며 해당 클래스의 속성과 특성을 나타낸다. 흔히 클래스는 인스턴스로 사용하는 경우가 많기 때문에 멤버변수를 인스턴스 변수라고 칭하는 경우가 많다.
멤버 변수는 클래스의 속성을 나타내면서 각각의 인스턴스 마다 다른 값을 갖게 할 용도로 사용한다.
사용범위는 해당 클래스 전체이다. private가 아니라면 참조변수를 이용해 다른 클래스에서 가져다 쓸 수 있다. 사용하는 메모리는 heap 메모리이다.
인스턴스 객체가 생성될 때 heap에 생성이 된 후 가비지 컬렉터가 메모리를 수거할 때 수명한다.
인스턴스 변수는 객체가 만들어 질 때 new를 이용하여 객체별로 생성된다. 생성 시점에서 타입별로 초기화가 이루어진다.
3. 클래스 변수 (Static Variable)
static이라는 예약어를 사용하여 클래스 내부에 선언한다. 클래스 내부 전체에서 사용이 가능하며 private가 아니면 클래스 이름으로 다른 클래스에서도 사용이 가능하다.
사용하는 메모리는 데이터영역 메모리이다. 프로그램이 시작할 떄 생성되었다가 프로그램이 끝나면 메모리가 해제될 때 소멸한다.
그래서 너무 큰 크기의 변수를 static 변수로 선언하면 부하가 높아진다.
주로 static 변수는 여러 인스턴스에서 동일한 값을 공유하여 사용하도록 할 때 사용된다.
위처럼 생성한 클래스 변수는 모든 인스턴스에 하나의 변수를 공유하게 된다.
ex) 강의실은 여러 군데 있지만 인포 데스크는 1개밖에 없다. 이유는 인포 데스크는 모두 공유하는 곳임.
여유 시간 있을 때 참고 사이트 다 봐야함.
[참고]
'Java > 문법 및 이해' 카테고리의 다른 글
[JAVA] final 키워드가 대체 무엇일까? (0) | 2023.01.12 |
---|---|
[JAVA] IS - A, HAS - A (0) | 2023.01.12 |
[JAVA] Primitive Type과 Reference Type (0) | 2023.01.12 |
[Java] 자바의 예외처리 (Exception) (0) | 2023.01.08 |
[Java] int와 Integer는 뭐가 다를까? (0) | 2022.12.30 |