static 이란 무엇일까?
영어 사전으로 "고정된"이라는 뜻이다. 그렇다면 어디에 고정되어 있을까? 바로 "메모리"이다. 이 메모리에 자동으로 고정시킴으로써 프로그램이 종료될 때 까지 계속해서 객체 "공유"를 한다는 의미이다.
즉 "공유"라는 핵심적인 키워드만 기억하면 된다.
< 사전 지식 >
* 변수
ㄴ1. 인스턴스 변수
: 객체 내부에서 존재하는 변수
: static이 없는 일반적인 필드
ㄴ2. 클래스 변수
: 객체 외부에서 존재하는 변수
: static 키드워드가 필드에 적용된변수
* 메소드
ㄴ1. 인스턴스 메소드(static이 포함되지 않은 메소드)
: 객체가 동작 시키는 메소드
Ex)
1. car.speed();
2. void helloworld(){
System.out.println("인스턴스 메소드");
}
ㄴ2. 클래스 메소드(static이 포함된 메소드)
: 클래스가 동작 시키는 메소드
Ex)
1. Math.random();
2. static void helloworld(){
System.out.println("스태틱 메소드");
}
static 왜 사용할까?
- 1. 클래스 변수 기준으로 설명
- 2. 클래스 메소드 기준으로 설명
static이 사용되는 이유를 알기 위해서는 언제 사용하는지를 알면 답이 나온다.
다음의 자바 코드를 보자.
-1. 클래스 변수 기준으로 설명
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class Main {
public static void main(String args[]) {
Car c0 = new Car(0, "자동차0");
Car c1 = new Car(1, "자동차1");
Car c2 = new Car(2, "자동차2")
}
}
class Car {
static int cnt = 0;
int num;
String name;
Car(int num, String name) {
this.num = num;
this.name = name;
cnt++;
}
}
|
cs |
해당 코드는 총 3개의 개수를 출력해주는 프로그램이다.
주목해야 할 부분은
static int cnt 부분이다.
만약 static 부분이 안 쓰이고 그냥 일반적인 기본형 타입으로
int cnt = 0;
으로 되게 된다면 어떻게 될까?
객체1
cnt = 0
cnt = 1
객체2
cnt = 0
cnt = 1
객체3
cnt = 0
cnt = 1
이런식으로 출력이 된다.
하지만 우리가 원하는건 총 3개라는것을 인식 시켜주는것이다.
그렇기 때문에 초반에
cnt = 1을 공유해주는 키워드가 필요한데 그것이 바로
static인것이다.
아래와 같이 출력이 될 것이다.
cnt = 0
ㅡㅡㅡ
cnt = 1
cnt = 2
cnt = 3
-2. 클래스 메소드 기준으로 설명
1
2
3
4
|
static double area(Circle c) {
return Math.PI * r * r;
}
|
cs |
static의 핵심은? 공유의 키워드이다. 여기서 Math 라는 클래스를 꺼내와야 한다.
이때 Math는 자체 포함된 클래스에서 있기 때문에 "공유"를 위한 static을 써줘야 한다.
(java.util.Math)
'* Web > [Back] Java' 카테고리의 다른 글
[Java] 자바 : 접근 제한자 private을 우회적으로 접근하는 getter, setter 이해하기 (0) | 2021.03.17 |
---|---|
[Java] 자바 : 접근 제한자 큰 그림 이해하기 (0) | 2021.03.17 |
[Java] 자바 : 레퍼런스(Reference)란? (1) | 2021.03.16 |
[Java] 자바 객체 단계별로 생성 하는 법? (0) | 2021.03.16 |
[Java] String.format() 메소드 사용법 (0) | 2021.03.11 |
댓글