728x90
클래스에 포함된 변수
자바에서 변수는 클래스 변수(cv, class variable), 인스턴스 변수(iv, instance variable), 지역 변수(lv, local variable)로 구분될 수 있다.
일반적으로 필드라고 부르는 것은 클래스 변수와 인스턴스 변수이며, 이 둘은 다시 static 키워드의 유무로 구분된다.
static 키워드가 붙으면 -> 클래스 변수
없으면 -> 인스턴스 변수
이 세 가지 유형의 변수들은 주로 선언된 위치에 따라 그 종류가 결정되며 각각의 유효 범위를 가지게 된다.
class Example {
int instanceVariable; // 인스턴스 변수
static int classVariable; // 클래스 변수(static 변수, 공유변수)
void method() {
int localVariable = 0; // 지역 변수. {}블록 안에서만 유효
}
}
- 클래스 변수
공통된 저장공간을 갖는다.
모든 객체들이 동일한 값을 갖게 됨.
한 클래스로부터 생성되는 모든 인스턴스들이 특정한 값을 공유해야 하는 경우에 사용
public class Main {
public static void main(String[] args) {
Dog frenchBullDog = new Dog();
Dog chihuahua = new Dog();
Dog pug = new Dog();
frenchBullDog.legs = 5;
chihuahua.legs = 6;
pug.legs = 7;
System.out.println(frenchBullDog.legs);
}
}
class Dog {
static int legs = 4;
}
// 7
// 클래스 변수는 모든 객체가 공유하기 때문에 하나만 바꿔도 모든 값이 바뀌는 격이다
인스턴스 변수와 달리 클래스명.클래스변수명 으로 사용 가능
// 객체 생성없이 사용
public class Main {
public static void main(String[] args) {
int legs = Dog.legs;
System.out.println(legs);
}
}
class Dog {
static int legs = 4;
}
// 4
- 인스턴스 변수
독립적인 저장 공간을 갖는다.
한 클래스로부터 생성된 모든 인스턴스들 각기 다른 값을 가질 수 있다
public class Main {
public static void main(String[] args) {
Dog frenchBullDog = new Dog();
Dog chihuahua = new Dog();
Dog pug = new Dog();
frenchBullDog.name = "happy";
chihuahua.name = "dubu";
pug.name = "choco";
System.out.println(frenchBullDog.name);
System.out.println(chihuahua.name);
System.out.println(pug.name);
}
}
class Dog {
String name;
}
// happy
// dubu
// choco
// 각기 다른 값을 가질 수 있음
- 지역 변수
메서드 내에 선언되며 메서드 내에서만 사용 가능한 변수
멤버 변수와는 다르게 지역변수는 스택 메모리에 저장되어 메서드가 종료되는 것과 동시에 함께 소멸
힙 메모리에 저장되는 필드 변수는 객체가 없어지지 않는 한 절대로 삭제되지 않는 반면, 스택 메모리에 저장되는 지역변수는 한동안 사용되지 않는 경우 가상 머신에 의해 자동으로 삭제
728x90
'개발일지 > Java' 카테고리의 다른 글
Java 메서드 오버로딩(Method Overloading) (0) | 2022.09.08 |
---|---|
Java 메서드 (Method) (0) | 2022.09.08 |
Java 클래스(Class)와 객체(Object) (0) | 2022.09.08 |
Java 반복문 while, do-while, for, for-each, (0) | 2022.09.08 |
Java 조건문 if, else, switch, 삼항연산자 (2) | 2022.09.08 |