자료구조
+) [JAVA] static변수, static메서드, 일반 변수/메서드 차이점 이해하기
나는나는용
2023. 5. 6. 09:51
728x90
일반 변수 & static 변수
편하게 생각하자면, static변수는 모오오오오든 객체에서 이 값을 공유하는 즉, 공용주방냉장고 라고 생각하면 된다.
'셰어하우스에서 내 방 냉장고에서 꺼내먹은 라면 - 일반'
'셰어하우스 공용주방 냉장고에서 꺼내먹은 라면 - static'
일반 method & static method
- 일반: 객체를 만들어줘야 호출이 가능하고, 일반변수와 static변수 둘 다 사용가능.
- static: 객체를 사용하지 않아도 되지만, static변수만 호출 가능.
<값의 변경>
객체2에서 '객체2.static변수A'의 값을 바꿔주면, 객체1에서의 '객체1.static변수A'의 값도 바뀐다.
객체2에서 '객체2.일반변수B'의 값을 바꿔줘도, 객체1에서의 '객체1.일반변수B'의 값은 그대로이다.
예시
package staticExam;
public class staticExample {
int month = 4;
static int date = 19;
// static 메서드~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// static 메서드이기 때문에 객체 사용하지 않아도 사용 가능함.
static void birth() {
// static메서드에서는 static 변수만 호출할 수 있다. -> month 호출 불가
// System.out.println(month);
// date는 static변수이므로 호출할 수 있다.
System.out.println("태어난 날짜는 " + date);
}
// 그냥 메서드~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public void birthDate() {
// 일반 메서드에서는 일반 변수와 static 변수 둘 다 사용 가능
System.out.println("객체를 만들어줘야 호출 가능" + month + date);
}
public static void main(String[] args) {
User user1 = new User();
User user2 = new User();
User.name = "상우";
// 일단 초기화는 상우로 되어있으니까 둘 다 상우라고 나옴
System.out.println(user1.name); // 상우
System.out.println(user2.name); // 상우
// 1만 인경이라고 바꿔줬으나 name은 static이므로 2도 인경이라고 바뀜
user1.name = "인경";
System.out.println(user1.name); // 인경
System.out.println(user2.name); // 인경
// user1의 age는 1로, user2의 age는 2로 초기화
user1.age = 1;
user2.age = 2;
// 각각 초기화한 값으로 나올 것
System.out.println(user1.age); // 1
System.out.println(user2.age); // 2
// user1의 age를 바꿔도 user2의 age는 바뀌지 않음.
user1.age = 12;
System.out.println(user1.age); // 12
System.out.println(user2.age); // 2
// user2의 age를 바꿔도 user1의 age는 바뀌지 않음.
user2.age = 24;
System.out.println(user1.age); // 12
System.out.println(user2.age); // 24
// static 메서드는 객체를 만들어주지 않아도 호출 가능.
birth();
// 그냥 메서드는 객체를 만들어줘야 호출 가능.
// birthDate();
staticExample sE = new staticExample();
sE.birthDate();
}
}
class User {
static String name;
int age;
String school;
}
728x90