이것저것
static 변수와 static 메서드 본문
JAVA 에서 static 이란?
JAVA 에서 static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해체된다는 것이다.
static 의 메모리
static 키워드를 통해 static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만, GC의 관리 영역 밖에 존재하므로 static 을 자주 사용하면 프로그램의 종료시까지 메모리에 할당된 채로 존재한다. (자주 사용하게 되면 시스템 성능에 악영향을 줌)
static 변수 특징
- static 변수는 클래스 변수이다.
- 객체를 생성하지 않고도 static 자원에 접근이 가능하다.
static 변수와 static 메서드는 static 메모리 영역에 존재하므로 객체가 생성되기 이전에 이미 할당 되어 있다. 그렇기 때문에, 객체 생성없이 바로 사용 가능하다.
그러면 static 은 어제 사용하면 좋을까?
public class Person{
private String name = "yunsu";
public void printName(){
System.out.println(this.name);
}
}
위와 같은 Class를 통해 100 명 Person 객체를 생성하면, yunsu 라는 값을 가지는 메모리가 100개나 중복해서 생성되게 된다. 이런 경우, static 변수를 사용하여 여러 객체가 하나의 메모리를 참조하도록 하면 효율이 높아진다.
일반적으로 static 은 결코 변하지 않는 값이라는 final 키워드와 상수의 값을 갖는다는 public 키워드와 함께 자주 쓰인다.
public class Person{
public static final String name = "yunsu";
public void printName(){
System.out.println(this.name);
}
}
static 메서드
static 메서드는 객체의 생성 없이 호출이 가능하며, 객체에서는 호출이 가능하지만 지양하고 있다. 일반적으로 유틸리티 관련 함수들은 여러 번 사용되기 때문에 static 메서드로 구현하는 것이 적합하다.
public class Test{
private String name1 = "A";
private static String name2 = "B";
public static void printMax(int x,int y){
System.out.println(Math.max(x,y));
}
public static void printName(){
//System.out.println(name1); 불가능한 호출
System.out.println(name2);
}
}
static 메서드서는 static 이 선언되지 않은 변수에 접근이 불가능하다. Test.printName()을 사용하려 하는데, name1은 new 연산을 통해 객체를 생성하고 메모리가 할당된다. 하지만 static 메서드는 객체의 생성 없이 접근하는 함수이므로, 할당되지 않는 메모리 영역에 접근을 해야하므로 문제가 발생한다. 그러므로 static 메서드에 접근하기 위한 변수는 반드시 static 변수로 선언되어야 한다.
'Java' 카테고리의 다른 글
자바 데이터 타입, 변수 그리고 배열 (0) | 2021.04.26 |
---|---|
OOP 란? (0) | 2021.04.20 |
가비지 컬렉션(Garbage Collection)이란? (0) | 2021.04.18 |
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가? (0) | 2021.04.18 |