본문 바로가기
* Web/[Back] Java

[Java] 자바 : static의 개념은 무엇이고 왜 사용할까?

by codinguser 2021. 3. 16.

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)

댓글