public class Sample {
public static void method1() {
System.out.println("Method 1");
}
public void method2() {
System.out.println("Method 2");
}
public static void main(String[] args) {
method1();
method2();
}
}
위와 같이 메서드를 static으로 선언하거나 그냥 선언할 경우가 있는데,
method1()은 정상 작동하지만,
metho2()는 Cannot make a static reference to the non-static method method2() from the type Sample 오류가 발생한다.
Sample a = new Sample();
a.method2();
method2를 호출하기 위해서는 다음과 같이 선언해야한다.
static을 사용하면 클래스가 메모리에 올라갈 때 이미 자동적으로 생성되기때문에 인스턴스들이 공통적으로 값을 유지해야할 때 사용한다.
static은 객체 생성없이도 사용이 가능하기 때문에 static메서드에는 인스턴스 변수를 사용할 수 없다.
인스턴스 변수는 인스턴스를 생성해야만 존재하기 때문이다.
메서드에서 인스턴스변수를 필요로 한다면 static을 사용하지 않는 것이 좋고 인스턴스 변수가 필요하지 않으면 static을 붙이는 것이 좋다. 메서드 호출 시간이 짧아지기 때문에 효율이 올라간다.
프로그램이 시작되면 메모리의 static 영역에 적재되고, 프로그램이 종료될 때 해제된다.
프로그램이 시작되어 클래스가 메모리에 올라가게 되면 static이 붙은 변수나 메서드는 클래스와 함께 자동으로 메모리의 static 영역에 생성됩니다. 자동으로 메모리에 올라가기 때문에 객체를 생성할 필요 없이 사용이 가능한 것입니다. 또한 자동으로 메모리에 올라가기 때문에 main함수를 static으로 구현하여 바로 실행할 수 있도록 만들어 주는 것입니다.
쉽게 생각하면 static을 선언해야 바로 객체를 할당한다고 보면 된다.
Reference
https://jooona.tistory.com/164
[JAVA] Static? 그거 왜 붙이는건데?
Static. 자바를 이용하여 개발을 하다 보면 참 많이 마주치는 키워드입니다. 당장 main 함수를 선언할 때만 보더라도 public static void main(String[] args){ ... } 요렇게 static이 떡하니 붙어있죠. 그렇다면 st
jooona.tistory.com
'🚣활동 > NHN Academy' 카테고리의 다른 글
Stream (1) | 2025.01.24 |
---|---|
Lambda Expression (0) | 2025.01.20 |
객체 생성과 제거 (0) | 2025.01.16 |
참조 타입 (0) | 2025.01.14 |
객체지향 프로그래밍 (0) | 2025.01.13 |