Java 변수 종류
클래스 변수, 인스턴스 변수, 지역 변수
변수의 종류를 결정짓는 것 = '변수가 선언된 위치'
//int 형 변수로 예시
public class test {
int a; // 인스턴스 변수 (멤버변수)
static int b; // 클래스 변수 (멤버변수)
void method() { int c; // 지역 변수
}
}
a와 b는 test class 내부에 선언되어 있으므로 멤버 변수이다.
그 중 b는 static으로 선언되었으니 클래스 변수이고, a는 인스턴스 변수이다.
c는 메서드 내에 선언 되어 있으므로 지역 변수 입니다.
변수의 종류 | 선언위치 | 생성시기(메모리 할당 시기) |
클래스 변수 | 클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스 변수 | 클래스 영역 | 인스턴스가 생성될 때 |
지역 변수 | 클래스 이외의 영역(메서드,생성자,초기화 블럭) | 변수 선언문이 수행 되었을 때 |
클래스 변수(Static 멤버 변수)
- 클래스 내에 Static 키워드로 선언된 변수 (인스턴스 변수에 static을 붙여줘야한다.)
- 처음 JVM이 실행되어 클래스가 메모리에 올라갈 때 ~ 프로그램이 종료될 때까지 유지
- 클래스가 여러 번 생성되어도 Static 변수는 처음 딱 한 번만 생성됨
- 동일한 클래스의 모든 객체들에 의해서 공유됨
인스턴스 변수는 각각 고유한 값을 가지지만 클래스 변수는 모든 인스턴스가 공통된 값을 공유하게 됩니다.
한 클래스의 모든 인스턴스들이 공통적인 값을 가져야할 때 클래스 변수로 선언합니다.
클래스가 로딩될 때 생성되어(그러므로 메모리에 딱 한번만 올라갑니다.) 종료 될 때 까지 유지되는 클래스 변수는 public 을 붙이면 같은 프로그램 내에서 어디서든 접근할 수 있는 전역 변수가 됩니다.
또한 인스턴스 변수의 접근법과 다르게 인스턴스를 생성하지 않고 클래스이름.클래스변수명 을 통해서 접근할 수 있습니다.
여러 개의 객체가 생성될 때 단 하나만 생성 되며 모든 객체들이 공유하는 개념으로 사용되는 변수가 static변수이다.
public class Hello{
String color;
int memory;
static String maker;
}
인스턴스 변수(Non-static 멤버)
- 클래스 내에 선언된 변수
- 객체 생성 시마다 매번 새로운 변수가 생성됨
- 클래스 변수와 달리 공유되지 않음
인스턴스 변수는 인스턴스가 생성될 때 생성됩니다. 그렇기 때문에 인스턴스 변수의 값을 읽어오거나 저장하려면 인스턴스를 먼저 생성해야합니다. 인스턴스 별로 다른 값을 가질 수 있으므로, 각각의 인스턴스마다 고유의 값을 가져야할 때는 인스턴스 변수로 선언합니다.
객체가 생성될 때 각 객체들마다 따로 따로 생성 되어 고유의 값을 받아 각 객체의 속성으로 자리 잡는 변수가 바로 instance변수이다.
public class Hello{
String color;
int memory;
}
지역 변수
메서드 내에서 선언되며 메서드 내에서만 사용할 수 있는 변수입니다. 메서드가 실행될 때 메모리를 할당 받으며 메서드가 끝나면 소멸되어 사용할 수 없게 됩니다.
- 전역변수(Global variable) : 어느 위치에서든 호출하면 사용이 가능
(함수 밖에 선언하여 클래스 전체에서 사용이 가능한 변수) - 지역변수(Local variable) : 특정구역({ }) 내에서 생성되어 그 구역에서만 사용
(함수 속에 선언되어 해당 함수 속에서만 사용이 가능한 변수)
public class Hello {
//메소드 밖에 있는 변수는 전역변수
//전역변수의 생명주기는 클래스 끝난다
static String s = "전역변수";
public static void main(String[] args) {
System.out.println(s);
String local = "지역변수";
//메소드 안에 넣어준 변수는 지역변수
//지역변수는 해당하는 메소드만 사용한다.
System.out.println(local);
method1();
}
public static void method1() {
System.out.println(strr);
//전역변수라 출력 가능
//System.out.println(local);
//지역변수이기에 출력 불가. 에러발생
}
}
변수란?
- 값을 담아두는 기억 공간(메모리 공간)
- 데이터를 저장할 수 있는 그릇과 같음
- 하나의 데이터 값을 저장할 수 있음
- 정해진 값은 고정되어 있지 않고 계속 변할 수 있음
- 저장되는 데이터에 따라 변수의 자료형(Data Type)이 결정됨
public class Hello {
public static void main(String[] args){
int num; //변수의 선언
num = 3; //변수의 초기화
System.out.println(num); //출력
}
}
'JAVA' 카테고리의 다른 글
[ jQuery ] ajax / 비동기 통신 (0) | 2022.06.15 |
---|---|
[ Java ] 추상클래스,추상메서드/인터페이스 (0) | 2022.05.10 |
JAVA 용어 정리 [1] JVM/스레드/오버로딩/오버라이딩 (0) | 2022.05.02 |
JAVA 용어 정리 [2] 프레임워크/스프링/JSP/JSTL/JQuery (0) | 2022.05.02 |
[Java] 배열 (0) | 2022.04.29 |
댓글