개발새발

[Java] 변수의 종류 본문

Java/개념을 Java

[Java] 변수의 종류

칸쵸. 2023. 9. 12. 02:20
728x90

와! 처음 클래스를 만들었을 때는

public class Pokemon {
	public static void main(String[] args) {
    int name;
    int number;
    int level;
    }
}

정도의 변수를 선언하기만해도 매우 해피해피해피였는데, 갈 수록 인스턴스 변수니 매개변수니 지역변수니 어쩌구저쩌구 너무 많은 종류의 변수들이 흘러나온다! 더 복잡해지기 전에 정리 한 번 하려고 쓰는 글~

 


1. 선언위치에 따른 변수의 종류

일단, 변수는 선언하는 위치에 따라서 종류를 나눌 수 있다. 크게 멤버 변수와 지역 변수로 나뉘며, 멤버 변수 클래스 변수와 인스턴스 변수를 통틀어서 부르는 변수다.

 

1) 멤버 변수(Member Variables)


클래스 또는 객체에서 일부러 선언되는 변수
객체의 상태를 나타내고, 클래스의 모든 메서드에서 사용할 수 있음
객체가 생성될 때 초기화 되고, 객체와 동일한 수명을 가짐

public class MyClass{
	int memberVar; //멤버변수
}

 

1)-1 정적변수 (Static Variable)

 

클래스에서 선언되며, 모든 객체가 공유하는 변수.
클래스 이름으로 직접 접근하여, 클래스가 로드될 때 초기화
객체의 수명과는 무관함 > 프로그램이 종료될 때까지 존재

클래스 변수라고도 불린다

public class MyClass {
	static int staticVar; //정적 변수
}

 

1)-2 인스턴스 변수 (instance Variables)

 

객체마다 별도로 가지는 변수
객체가 생성 될 때 초기화되며, 객체와 동일한 수명을 가짐

public class MyClass {
	int instanceVar; //인스턴스 변수
}

 

2) 지역변수(Local Variables)


메서드나 블록 내에서 선언되며, 해당 블록 내에서만 사용 가능한 변수
메서드나 블록이 실행될 때 생성되며, 실행이 종료되면 사라짐

대표적으로 for문 선언에 사용되는 변수가 있다

public void myMethod() {
	int localVar; //지역변수
	//지역변수 localVar 사용가능
}
//이 밑으로는 localVar 사용 불가능
for(int i = 1 ; i <=10 ; i++) {
	//지역변수 i 사용 가능
}
//이 밑으로는 i 사용 불가능

 

3) 매개변수(Parameter Variables)


메서드나 생성자에 전달되는 값 또한 변수
메서드 내에서 작업을 수행하는 데 필요한 데이터를 전달하는데 사용
메서드를 호출할 때 인자(argument)로 전달


**인자: 메서드 호출 시에 전달되는 실제 값

public int add(int a, int b) {
	return a + b;
}

public static void main(String[] args) {
	MyClass s = new MyClass;
}

2. 데이터 타입에 따른 종류

이 아래로는 선언위치와 상관 없이 데이터 그 자체의 타입이 나뉘는 기준이다.

 

1) 기본형 변수 

 

자료의 실제값 저장하는 변수 (논리형, 문자형, 정수형, 실수형)


2) 참조변수(Reference Variables)


객체를 가리키는 참조를 저장하는 변수

값이 저장되어 있는 주소값을 값으로 가진다.
객체의 타입에 따라 다양한 참조변수를 선언할 수 있음

MyClass myC; //MyClass 객체를 가리키는 참조변수
String srt; //String 객체를 가리키는 참조변수

 


결론~

변수가 나뉘는 기준이 다른 것이므로 예를 들어 한 개의 변수가 멤버변수이며 참조형 변수가 될 수 있다.

public class Variable {
    String a; //String으로 정의된 참조변수이자 Variable 클래스의 멤버변수
}

그나저나 블로그 글 하나 쓰는데 너무 오래걸린다

'Java > 개념을 Java' 카테고리의 다른 글

[Java] 배열과 리스트 1 : Array ~ 다차원 배열  (1) 2023.09.18
[Java] API  (1) 2023.09.14
[Java] 추상클래스 Abstract  (0) 2023.09.12
[Java] 생성자와 this  (0) 2023.09.11
[Java] 클래스와 객체  (0) 2023.09.11