Static vs Instance

코끼릭·2022년 3월 24일
0

IT

목록 보기
2/24

static vs instance

static은 자바의 경우 JVM이 프로그램을 실행할 때 static영역의 메모리에 클래스의 정보가 로딩될 때 할당되고 프로그램이 종료할 때 할당 해제된다. heap 메모리 영역에 할당되는 instance와 다르게 GC에 의해 관리되지 않기 때문에(GC는 생명주기에 의해 사용을 안하는 heap 메모리를 자동으로 할당 해제한다.) 프로그램 실행 내내 메모리에 할당된 채 존재를 하기 때문에 과용하게 되면 시스템 성능에 악영향을 미칠 수 있다. 추가로 멀티 쓰레드 환경에서는 공유 메모리 자원에 대한 안정성 문제도 static을 사용할 때 주의해야 되는 점이다.

static method vs instance method

클래스가 메모리에 올라갈 때 자동으로 생성되는 static method는 인스턴스를 생성하지 않아도 바로 사용이 가능하지만 대신 method 내부에 인스턴스 변수를 사용해서는 안된다. 또 다른 특징으로 instance method의 경우 생성된 instance마다 메모리 공간이 할당되지만 static은 하나의 메모리 공간이 할당 되고 모든 instance에서 해당 메모리 공간을 공유가 가능하다는 점이다.

static block vs instance block

static block은 클래스가 처음 로딩될 때 한 번만 수행되는코드를 감싸는 block 이다.

class Person {
	String name = "";
    int age = 0;
    static {
    	System.out.printIn("사람 클래스 로딩");
    }
    Person() {
    	System.out.printIn("홍길동 인스턴스 생성");
        name = "홍길동";
        age = 19;
    }
    Person(String name, int age) {
    	System.out.printIn(name+"인스턴스 생성");
    	this.name = name;
        this.age = age;
    }
    public static void main(String[] args) {
    	new Person();
        new Person("영희",19);
    }
}

실행결과
사람 클래스 로딩
홍길동 인스턴스 생성
영희 인스턴스 생성

instance block은 인스턴스가 생성될 때 마다 호출이 되고 생성자보다 먼저 수행이 되는 코드이다. 보통은 생성자 내부에 코드를 작성하지만 생성자마다 공통으로 실행해야 되는 코드에 사용하면 오버로딩 되는 생성자 내부의 코드 중복을 방지할 수 있다.

class Person {
	String name = "";
    int age = 0;
    {System.out.printIn("사람 생성");}
    Person() {
    	name = "홍길동";
        age = 19;
    }
    Person(String name, int age) {
    	this.name = name;
        this.age = age;
    }
    public static void main(String[] args) {
    	new Person();
        new Person("영희",19);
    }
} 

실행결과
사람 생성
사람 생성

참고링크

profile
ㅇㅅㅇ

0개의 댓글