반응형
정적(Static)이란?
정적(Static)은 고정된이란 의미를 가지고 있습니다.
static이라는 키워드를 사용하여 static변수와 static메소드를 만들 수 있는데
이 둘을 합쳐서 정적 멤버(=클래스 멤버)라고 합니다.
정적 필드, 정적 메소드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이기때문에
클래스로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할때 클래스별로 관리됩니다.
따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있습니다.
Static영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 가지지만,
Garbage Collector의 관리 영역 밖에 존재하기 때문에 프로그램이 종료될 때까지 메모리에 값이 유지된 채로 존재하게됩니다.
그렇기에 static을 남발하게되면 성능에 악영향을 줄 수 있습니다.
클래스 설계시 static의 사용지침
- 클래스의 멤버변수 중 모든 인스턴스에 공통된 값을 유지해야하는 것이 있는지 보고 있다면 Static을 붙여준다.
- 작성한 메소드 중 인스턴스 변수를 사용하지 않는 메소드에 대해서 static을 붙일것을 고려한다.
해당 static을 멤버변수에 사용하여 모레성쌓기 게임 프로그램을 만들어보았다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package class02;
import java.util.Random;
class Person{
String name; // 이름
static int sand=100; // static 붙은 이유 = 변하지 않는 공용 데이터이기 때문에
boolean game() {
Random random = new Random();
int num=random.nextInt(20)+1; //랜덤수 생성 1~20까지
System.out.println(name+"님이 "+num+" 가져갑니다..");
sand-=num;
System.out.println("남은 모래: "+sand);
System.out.println();
if(sand<=0) { // 남은 모래가 0보다 작으면 게임종료
System.out.println(name+"님, 게임오버!");
return true;
}
return false;
}
Person(String name){
this.name=name;
}
}
public class Test08 {
public static void main(String[] args) {
Person[] p = new Person[3];
// 객체 배열
p[0]=new Person("홍길동");
p[1]=new Person("아리");
p[2]=new Person("티모");
int i=0;
while(true) {
if (p[i].game()) {
break;
}
i++; // 다음 사람의 순서로 넘어가게 해줌
if (i==p.length) { //순서가 끝나면 다시 순서 다시 초기화
i=0;
}
}
}
}
|
cs |
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 카드 사용 프로그램 (Equals() 메소드, instanceof 연산자) (0) | 2022.06.26 |
---|---|
[JAVA] 접근제어자 private (Getter, Setter 메소드) (0) | 2022.06.26 |
[JAVA] 변수 명칭 정리 (멤버변수, 매개변수, 지역변수, 클래스변수, 인스턴트변수) (0) | 2022.06.25 |
[JAVA] Map을 활용한 학생부 프로그램 만들기 (0) | 2022.06.24 |
[JAVA] toString() 오버라이딩 (0) | 2022.06.24 |