2024. 10. 3. 23:26ㆍJava
변수는 선언 위치에 따라서 총 3가지로 선언될 수 있다.
클래스 영역에서 선언되는 (=멤버변수 = 객체의 속성정의)
클래스 변수와 인스턴스 변수
(변수 앞에 static이 붙으면 클래스 변수, 나머지는 인스턴스 변수)
그리고 클래스 이외의 영역에서 선언되는 지역변수
public class MethodEX { // 클래스 영역
int num; // 인스턴스 변수
static double val; // 클래스 변수 (=static 변수)
void method() { // 메서드 영역
boolean result = ture; // 지역변수
}
}
인스턴스 변수 (instance variable)
클래스 영역에서 선언되며 앞서 적은 게시글의 대부분은 이 인스턴스 변수가 사용되었다.
인스턴스를 생성할 때마다 새로 만들어지며 별도의 저장공간을 가지므로 서로 다른 값을 가질 수 있다.
예를 들어 Pen이라는 객체가 여러개 생성되고 인스턴스 변수로 int color;가 선언되었다면,
이 생성된 Pen은 각 객체마다 color를 다르게 설정할 수 있다.
이 이유는 앞서 말했듯 새로 객체가 생성될 때마다 인스턴스 변수 역시 같이 새로 생성되어 별도의 저장공간을 가지기 때문이다.
public class Pen {
String color;
}
public class RealPen {
public static void main(String[] args) {
Pen p1 = new Pen();
Pen p2 = new Pen();
p1.color = "빨간색";
p2.color = "노란색";
}
}
클래스 변수 (class variable)
클래스 변수를 선언하는 방법은 위의 인스턴스 변수 앞에 static만 붙이면 된다.
인스턴스 변수는 각 인스턴스마다 저장공간이 달라 서로 다른 값을 가질 수 있지만
클래스 변수는 한 클래스의 모든 인스턴스들이 생성될 때마다 같은 값을 가져야 할 때 선언한다.
즉, 클래스 변수는 모두 같은 하나의 저장공간을 공유한다.
예를 들어 같은 회사의 같은 시리즈의 펜이라면 펜의 길이처럼 규격이 모두 같아야 할 것이다.
class Pen {
static int size = 13;
}
public class EX1 {
public static void main(String[] args) {
Pen p1 = new Pen();
Pen p2 = new Pen();
System.out.println(p1.size); // 13출력
p1.size = 15;
p2.size = 20;
System.out.println(p1.size); // 20출력
System.out.println(p2.size); // 20출력
}
}
위 예시의 첫 번째 Print 처럼 객체를 생성한 뒤 바로 사용이 가능하다.
처음 대입된 값이 그대로 나옴을 확인할 수 있다.
그 뒤에 p1에 15의 값을 넣고, p2에 20값을 차례로 넣어주었다.
하지만 출력을 했을 때 모두 똑같이 마지막에 넣은 값 20이 출력되었다.
이처럼 static 변수는 같은 저장공간을 가지기 때문에 값을 바꾸어주면 해당 static 변수를 사용하는 모든 값이 같이 바뀌게 된다.
지역변수 (local variable)
메서드 내에서 선언하는 변수를 지역변수라 하며 해당 메서드 내에서만 사용이 가능하다. 메서드가 종료되는 즉시 사용이 불가하며 소멸된다.
for (int i=0; i<5; i++) {
System.out.println (i + " * 2 =" + (i*2))
}
위 예제에서 선언된 int i변수는 for문 내에서 선언되었다.
따라서 변수 i는 for문이 끝나는 즉시 사라지게되며 사용할 수 없다.
'Java' 카테고리의 다른 글
[Java] 자바의 조건문 if ~ else, switch case (0) | 2024.10.04 |
---|---|
[Java] Array - 중복 제거된 난수 생성하기 feat.로또번호 (0) | 2024.10.04 |
[Java] collection(List, Set, Map) (1) | 2024.10.04 |
[Java] 페이징(paging) 처리 알고리즘 (1) | 2024.10.04 |
[Java] Java, 객체지향 언어 (0) | 2023.12.13 |