728x90
현재 자바를 처음부터 자세히 공부를 하면서 static 변수와 메서드에 대해 학습하고 있다.
평소에 psvm이라는 명령어는 매우 많이 쳤지만, main에 static이 붙어있는 이유에 대해 크게 신경쓰지 않았고 드디어 의미에 대해 정확히 알게 되어 글을 쓰게 됐다!
🔍 static 메서드란?
멤버 메서드에는 다음과 같은 것들이 있다.
- 인스턴스 메서드: static이 붙지 않은 멤버 메서드
- static이 붙지 않은 멤버 메서드는 인스턴스를 생성해야 사용할 수 있고, 인스턴스에 소속되어 있다. 따라서 인스턴스 메서드라 한다.
- 클래스 메서드: static이 붙은 메서드
- 클래스 메서드, 정적 메서드, static 메서드 등으로 부른다.
- static이 붙은 멤버 메서드는 인스턴스와 무관하게 클래스에 바로 접근해서 사용할 수 있고, 클래스 자체에 소속되어 있다. 따라서 클래스 메서드라 한다.
이때, static(클래스) 메서드 내에서는 static만 사용할 수 있다. static이 붙지 않은 인스턴스 변수나, 인스턴스 메서드는 사용할 수 없다.
(인스턴스 기능을 사용하기 위해선 참조값을 알아야 한다. 하지만 정적 메서드는 참조값의 개념이 없기 때문에 인스턴스 변수나 인스턴스 메서드를 사용할 수 없다.)
🔑 main() 메서드는 정적 메서드이다!
main() 메서드는 인스턴스 생성 없이 실행하는 가장 대표적인 메서드이다.
main() 메서드는 프로그램을 시작하는 시작점이 되는데, 객체를 따로 생성하지 않아도 main() 메서드가 작동한다!
그 이유는 main() 메서드가 static이기 때문이다.
정적 메서드는 정적 메서드만 호출할 수 있다. 따라서 정적 메서드인 main()이 호출하는 메서드에는 정적 메서드를 사용해야 한다.
public class ValueDataMain {
public static void main(String[] args) {
ValueData valueData = new ValueData();
add(valueData);
}
static void add(ValueData valueData) {
valueData.value++;
System.out.println("숫자 증가 value=" + valueData.value);
}
}
만약 위 코드의 add 함수에서 static을 빼게 된다면 다음과 같은 에러가 발생한다.
- Non-static method 'add' cannot be referenced from a static context
728x90
'Java' 카테고리의 다른 글
[JAVA] 추상 클래스와 인터페이스에 대해 알아보자 (0) | 2024.07.07 |
---|---|
[JAVA] 자바의 메모리 구조에 대해 알아보자 (0) | 2024.07.03 |
[JAVA] 자바에서 SWAP 구현하기! (1) | 2024.07.03 |
[JAVA] 자바 컴파일과 실행 과정에 대해 알아보자 (0) | 2024.07.02 |
[JAVA] compareTo()에 대해 알아보자(문자열, 숫자 비교) (1) | 2024.04.18 |