static이란
static이란?
Static은 ‘정적인, 고정된’이라는 뜻을 가지고 있습니다.
static이 앞에 붙는 변수나 메서드는 어떤 객체에 소속되는 것이 아닌, 클래스에 고정되어 있는 변수나 메서드입니다.
static의 특징?
메모리에 고정적으로 할당됩니다.
객체 생성 없이 사용할 수 있습니다.
프로그램이 시작되면 메모리의
static영역에 적재되고, 프로그램이 종료될 때 삭제됩니다.static메서드 내에서는 인스턴스 변수를 사용할 수 없습니다.
메모리에 고정적으로 할당된다는 것은?
각 객체들에서 공통적으로 하나의 값이 유지됩니다.
따라서 여러 곳에서 사용되는 반복적인 작업을 수행할 때
static을 유용하게 사용할 수 있습니다.
객체 생성 없이 사용할 수 있다는 것은
static 키워드를 붙이면 객체 생성 없이도 메서드나 변수를 사용할 수 있습니다
왜냐하면 프로그램이 시작되면 자동으로 메모리에 올라가기 때문입니다.
예시)
1
2
3
4
5
6
7
8
9
10
11
public class Main {
public void print(){
System.out.print("static");
}
public static void main(String[] args){
print();
}
}
-> 컴파일 에러 발생
왜냐하면 print라는 메서드는 static 메서드가 아니기 때문에
Main이라는 객체가 생성되어야 실행될 수 있기 때문
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Main {
public void print(){
System.out.print("static");
}
public static void main(String[] args){
Main main = new Main();
main.print();
}
}
-> static을 안쓰려면 이렇게 작성해야함
1
2
3
4
5
6
7
8
9
10
11
public class Main {
public static void print(){
System.out.print("static");
}
public static void main(String[] args){
print();
}
}
-> static을 사용하면 객체 생성 없이도 메서드 사용가능
왜냐면 클래스가 자동으로 메모리에 올라가기 때문!!
프로그램이 시작되면 메모리의 static 영역에 적재되고, 프로그램이 종료될 때 삭제된다는 것은
프로그램이 시작되어 클래스가 메모리에 올라가게 되면
static이 붙은 변수나 메서드는 클래스와 함께 자동으로 메모리의 static 영역에 생성됩니다.
자동으로 메모리에 올라가기 때문에 객체를 생성할 필요 없이 사용이 가능한 것입니다.
static 메서드 내에서는 인스턴스 변수를 사용할 수 없다는 것은
프로그램 실행과 동시에 메모리에 올라가기 때문에 인스턴스 변수는 사용할 수 없습니다.
왜냐하면 인스턴스 변수는 객체를 생성해야만 사용이 가능하기 때문에
객체를 생성하기 전에 먼저 메모리에 올라가는
static메서드에서는 사용할 수 없는 것입니다.