[Java] static이란?

kuku·2023년 1월 14일
0

Java

목록 보기
4/7

Java에서는 메소드와 변수 앞에 static이라는 키워드를 붙일 수 있다. 그렇게 되면 무엇이 달라질까?

📖클래스와 인스턴스

클래스 영역 내에 선언된 변수를 멤버변수라고 한다. 멤버변수 중 static이 붙은 것은 클래스변수, 붙지 않은 것은 인스턴스변수라고 한다. 마찬가지로 메소드 앞에 static 키워드가 붙어있으면 클래스메소드, 붙지 않은 것은 인스턴스메소드라고 한다. 클래스변수와 클래스메소드는 클래스 소속, 인스턴스변수와 인스턴스메소드는 인스턴스의 소속이다.

📁클래스변수와 클래스메소드

클래스변수와 클래스메소드는 모든 인스턴스가 공통으로 하나를 공유한다. 따라서 한 클래스의 모든 인스턴스들이 공통적인 값 또는 기능을 유지해야하는 경우 사용하게 된다. 클래스변수와 클래스메소드는 인스턴스를 생성하지 않고도 '클래스이름.클래스변수', '클래스이름.클래스메소드'와 같은 형식으로 사용할 수 있다.

📁인스턴스변수와 인스턴스메소드

반면 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다. 인스턴스마다 고유한 값 또는 기능을 유지해야하는 경우 인스턴스변수와 인스턴스메소드를 사용하는데, 먼저 인스턴스를 생성해야만 사용할 수 있다.

위와 같은 예시가 있다고 하면 instanceVar와 instanceMethod는 인스턴스 소속의 변수와 메소드이므로 Foo를 통해서는 사용할 수 없다. 반면 f1과 f2를 통해 classVar와 classMethod는 사용할 수 있다.
또한, f1에서 instanceVar의 값을 바꿔도 다른 곳에 속한 instanceVar의 값에는 아무 영향을 주지 않는다. 그러나, f1에서 classVar의 값을 바꾸는 경우 Foo의 classVar, f2의 classVar 값이 모두 동일하게 바뀌게 된다.

참고 : https://youtu.be/hvTuZshZvIo, 자바의 정석 3판

0개의 댓글