반응형
정적제한자 static
⭐ 정말정말 중요한 static ⭐
- 1개로 고정 (정적이다)
- static method는 클래스의 객체 없이도 참조 가능하다.
- static을 사용한다면 메모리에 바로 1개 만들어준다(고정으로)
- 따라서 클래스 객체를 생성하지 않아도 사용 가능하다.
💡 다른 class에 있는 static키워드가 붙은 것들은 new로 class 객체 생성 없이도 사용가능하다.
➰static 변수 특징
1. 모든 객체들이 값을 공유하는 변수가 된다.
2. 객체 생성 없이, 클래스 이름만으로 참조가 가능하다.

- 위의 그림과 같이 a변수는 일반변수로 객체가 생성될때 마다 객체 안에 생성된다. 따라서 c1/c2/c3의 a가 전부 다른것.
- b변수는 static 변수로 객체 밖의 메모리에 생성되어 객체들이 모두 하나의 변수에 접근하게 된다.
🔆아래와 같이 Count calss를 만들어 a는 일반변수, b는 static 변수로 선언해주었다.
package day16.static_.var;
public class Count {
public int a;
public static int b;
}
🔆Main class에서
- a변수는 Count 객체를 선언해준 후에야 사용가능하고 여러개 객체를 생성할 경우 a는 각 객체마다 다 다른 a이다.
- b는 static 변수이기 때문에 Count 객체를 사용하지 않아도 " [클래스이름.변수이름] => Count.b " 이렇게 사용가능하고, 객체를 여러개 생성함과 상관없이 b는 값이 계속 누적된다.
package day16.static_.var;
public class Main {
public static void main(String[] args) {
Count c1 = new Count ();
c1.a++;
c1.b++;
System.out.println("일반변수:" + c1.a);
System.out.println("정적변수:" + c1.b);
Count c2 = new Count();
c2.a++;
c2.b++;
System.out.println("일반변수:" + c2.a);
System.out.println("정적변수:" + c2.b);
Count c3 = new Count();
c3.a++;
c3.b++;
System.out.println("일반변수:" + c3.a);
System.out.println("정적변수:" + c3.b);
/*
* 일반변수는 객체마다 새로운 변수로 인식.
* static 변수는 객체마다 호출하면 하나의 객체로 값이 누적된다.
* c1 / c2 / c3의 일반변수는 다른 변수로 인식하여 a의 값은 1이지만
* b는 static변수로 누적되어 3이된다.
*/
//static변수 특징 2번째
//객체 생성없이 바로 접근 가능하다. class이름을 활용하여
Count.b++;
Count.b++;
Count.b++;
System.out.println(Count.b);
}
}
➰static method 특징
1. 객체 생성 없이, 사용가능하다.
2. static method에서는 static 멤버를 사용가능(static 끼리는 바로 호출하며 사용가능하다)
일반 method, 일반 변수들은 객체 생성없이 바로 사용 불가능하다.
🔆Count class에 some1은 일반 method로 some2는 static method로 만들어주었다.
package day16.static_.method;
public class Count {
public int a;
public static int b;
//일반method - 일반변수, 정적변수 둘다 사용가능
public int some1() {
a = 10;
return ++b;
}
//정적method - 정적변수만 사용가능(단, 객체생성을 통해서 사용가능하다)
public static int some2() {
//a = 10;// 일반변수를 그냥 사용은 불가능. (클래스 객체 생성 필요함)
Count c = new Count();
c.a = 10;
return ++b; // b는 static 변수라서 사용 가능
}
}
🔆Main 클래스
- static 변수와 같이 일반 method는 객체를 선언해야 사용가능하고, static method는 "class이름.method이름" 으로 사용가능하다.
- main method도 static method기 때문에 static method인 a를 그냥 사용가능하다.
package day16.static_.method;
public class Main {
public static void main(String[] args) {
Count c = new Count();
c.some1(); //일반
c.some2(); //static
Count.some2();
//main은 static이기 때문에
a(); // 그냥 사용 가능.
}
public static void a() {
}
}
<자바에서 static에 대해 알아둬야 할 것>
1. static 멤버는 객체 생성 없이 "클래스명.이름"으로 참조가능하다.
2. static변수는 객체간 값의 공유를 의미힌다.
3. static method는 같은 static멤버만 참조가능하다.
반응형
'국비지원 > JAVA' 카테고리의 다른 글
| [JAVA] 17. 인터페이스(Interface) (0) | 2022.10.14 |
|---|---|
| [JAVA] 16-2. singleton Design Pattern & final Keyword & 상수(constant) & abstract (0) | 2022.10.13 |
| [JAVA] 15. 다형성 (0) | 2022.10.12 |
| [JAVA] 14-2. 접근제어자 & 객체와 배열 (0) | 2022.10.11 |
| [JAVA] 14-1. super keyword (0) | 2022.10.11 |