public static void main(String[] args) 이 구문을 우리는 매번 마주합니다. 하지만 static을 어떤경우에 쓰는지 모르는 분이 계셔서 요청으로 게시하게 되었습니다.
static 변수
변수나 메소드를 사용할때는 객체를 생성하여야 합니다. 하지만 어떠한 키워드 하나로 인해 매번 써야할 것을 안써도 된다면? 무척이나 편리해지고 시간적으로도 이득을 많이 볼 수 있습니다.
그렇게해서 나온게 static 입니다.
왜 static을 쓰느냐?
답은 간단합니다. 위에서 말씀드렸다싶이, static을 쓰면 객체를 생성하지 않고 변수, 메소드를 사용 할수 있을 뿐더러, 객체를 생성하지 않아도 되니깐 당연히 편리하고 속도도 빠릅니다.
하지만 막쓰면 메모리 낭비가 나겠죠? 설명드리겠습니다.
클래스를 생성할때, (멤버)변수 중 모든 인스턴스에 동일하게 사용해야하는 것에 대하여 static을 붙힌다.
- 인스턴스를 생성을 하면, 각각의 인스턴스들은 서로 다른값을 가지고 유지를 합니다. 상황에 따라, 인스턴스들이 같은 값을 유지하게 하여야하는 경우 static으로 공통 값으로 덮어줍니다.
static이 붙은 (멤버)변수는 인스턴스를 생성하지 않아도 당연히 사용할 수 있다.
- static이 붙은 멤버변수,클래스변수는 클래스가 console 메모리에 올라갈때 자동적으로 같은 값에 덮어지기 때문입니다.
어떠한 상황에 static을 쓰는게 옳을까?
- 우선 멤버변수에 모든 인스턴스에 같은 값을 유지해야하는 부분이 맞는지 확인하고, 그것이 맞다면 static을 넣어줍니다.
- 작업중인 메소드에 인스턴스를 사용하지 않는 메소드에 대해서는 static을 붙일지 말지 판단을 해야합니다.
메소드 내에서 인스턴스 사용하지 않는다면, static을 붙히는 거에 대해 고민해보자.
- 메서드의 작업내용중에서 인스턴스 변수를 필요로 한다면, static을 붙일 수 없습니다. 반대로 인스턴스변수를 필요로 하지 않는다면, 가능하면 static을 붙이는 것이 좋습니다. 메서드 호출시간이 짧아지기 때문에 효율이 높아닙니다.
class Card {
String Shape; // 카드의 모양 - 인스턴스(변수)
int number; // 카드의 숫자 - 인스턴스(변수)
static int width = 150; // 카드의 넓이 - 클래스 변수(static 변수랑 같음)
static int height = 250; // 카드의 높이 - 클래스 변수(static 변수랑 같음)
}
각 Card인스턴스(변수)는 자신만의 모양(Shape)와 숫자(number)를 유지하고 있어야 하므로 이들을 인스턴스(변수)로 선언하였고, 각 카드들의 넓이(width)과 높이(height)는 모든 인스턴스(변수)가 공통적으로 같은 값을 유지해야하므로 클래스변수로 선언하였습니다.
만일 카드의 폭을 변경해야할 필요가 있을 때는 모든 카드의 width값을 변경하지 않고, 한 카드의 width값만 변경해도 모든 카드의 width값이 변경되는 셈이 됩니다.
늘 그렇다싶이 궁금한 부분은 댓글 달아주시면 친절히 설명드리도록 하겠습니다!
참조 : 자바의 정석
'Eclipse(JAVA)' 카테고리의 다른 글
자바(Java) 연산자 총 집합! (8) | 2019.07.29 |
---|---|
자바(Java) if 문 입성! (2) | 2019.07.28 |
자바(Java) public,private,protected,default 접근 제어자 차이점은? (4) | 2019.07.26 |
자바(JDK) 환경변수 설정 (0) | 2019.07.25 |
자바/이클립스 다운로드 및 설치 (17) | 2019.04.17 |