정적(Static)이란?
정적(static)은 고정된이란 의미를 가지고 있다. Static이라는 키워드를 사용하여 Static변수와 Static메소드를 만들 수 있는데 다른말로 정적필드와 정적 메소드라고도 하며 이 둘을 합쳐 정적 멤버라고 한다. (클래스 멤버라고도 한다.) 정적 필드와 정적 메소드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이다. 그렇기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할때 클래스별로 관리된다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있다.
정적(Static) 멤버 생성
new 키워드가 붙으면 메모리 힙 영역에 위치 (메모리에 올린다)하는 반면 Static 키워드를 통해 생성된 정적멤버들은 Heap영역이 아닌 Static영역에 할당된다. Static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 가지지만 Garbage Collector의 관리 영역 밖에 존재하기에 Static영역에 있는 멤버들은 프로그램의 종료시까지 메모리가 할당된 채로 존재하게 된다. 그렇기에 Static을 너무 남발하게 되면 만들고자 하는 시스템 성능에 악영향을 줄 수 있다. 해제하려면 null로 리퍼런스를 재선언한다.
정적(Static) 멤버 선언
필드나 메소드를 생성 시 인스턴스로 생성할것인지 정적으로 생성할것인지에 대한 판단 기준은 공용으로 사용하느냐 아니냐로 내리면 된다. 그냥 생성한다면 자동으로 인스턴스로 생성되며 정적으로 생성하려면 필드와 메소드 선언 시 static이라는 키워들를 추가적으로 붙이면 된다.
static int num = 0;//타입 필드 = 초기값
public static void static_method(){}//static 리턴 타입 메소드 {}
정적(Static) 메서드 사용 예시
class Name{
static void print(){ //클래스 메소드
System.out.println("내이름은 홍길동입니다.");
}
void print2(){ //인스턴스 메소드
System.out.println("내이름은 이승훈입니다.");
}
}
public class Static_pracEx{
public static void main(String[] args){
Name.pring(); //인스턴스 생성없이 바로 호출
Name name = new Name();
name.print2(); //인스턴스 생성 후 호출
}
}
정적 메소드는 클래스가 메모리에 올라갈 때 정적 메소드가 자동적으로 생성된다. 그렇기에 정적 메소드는 인스턴스를 생성하지 않아도 호출을 할 수 있다. 정적 메소드는 유틸리티 함수를 만드는데 유용하게 사용될 것 같다.
'IT' 카테고리의 다른 글
제네릭(Generic)이란? (0) | 2022.12.23 |
---|---|
데이터베이스 정규화(Normalization), 역정규화(DeNormalization) (0) | 2022.12.18 |
싱글톤 패턴(Singleton Pattern) (0) | 2022.12.15 |
JVM의 구조와 Java 실행 방식 (0) | 2022.12.11 |
OSI 7계층 (TCP/IP 4계층) (1) | 2022.11.30 |