JVM의 메모리 영역은 네개로 나뉜다.
메서드: static zone, none static zone 으로 나뉜다. 프로그램 종료 시 자동 소멸된다
Heap: 객체가 생성된다. ex) array, class..
사용이 끝나면 소멸 되어야 함. garbage collector가 주기적으로 해줌.
포인터가 없어지면 쓰레기값이 된다. 포인터는 스택에 있고 스택은 프로그램 종료 시 소멸된다.
genetration 카운트가 높은 것부터 없앤다. 높은게 gc가 수집활 확률이 높다. -왜? 숫자가 낮은 것은 방법 사용됐다는 것. 오래 사용하지 않은 것부터 없앤다.
Stack: 프로그램 종료 시 소멸된다. 메소드가 호출되면 스택에 들어간다. thread가 만들어져 동작시킨다.
Literal: 문자열, 상수가 저장되는 공간이다.
모든 메서드가 static이라면?
Allstatic.hap(10,20); // 이 방식을 쓰는게 바람직하다.
상단 같은 방식 (객체생성)을 막으려면 생성자 메소드 호출을 불가능 하게 해야하는데,
어떻게? 접근 제어를 private으로 바꾼다. 호출하지 못하므로 객체 생성이 불가하다.
근데 이것을 사용할 수 있는 방법 : 모든 메서드를 static으로 설정. 스태틱은 객체 생성과 관련 없다. 클래스 이름으로 하기 때문에
클래스 이름 앞 생성자를 private 설정시 갹채 생성을 막을 수 있다.
생성자는 반드시 public이다? -> No. 틀린 말이다.
객체 생성을 막기 위해 private 설정. private이니까 이 클래스를 사용 못하는게 아니라 -> 다 static으로 설정해 클래스 이름으로 사용한다. allStatic.hap(19,10);
private생성자가 가지고 있는 클래스들의 멤버들은 모두 static이어야 한다.
Allstatic( 이것은 utility 클래스이다)
public static int hap(int a, int b){
int v = a+b;
return v;
}
hap은 static 클래스이므로
AllstaticTest
System.out.println(AllStatic.hap(10,30));
System.out.println(AllStatic.min(30,59));
이렇게 사용한다. 클래스 이름. 메서
AllStatic st = new AllStatic();
sout(st.hap(20,10)); //이런 방식으로 사용할 수도 있지만 원래 의도에 어긋난다
AllStatic st =new AllStatic();
객체 생성을 하지 못하게 생성자 메서드를 private처리하자
AllStatic클래스에
private AllStatic(){}
추가하고 객체 생성을 하면 에러난다.
생성자를 private을 한다면 모든 멤버는 static을 가져야 한다
'JAVA > Bootcamp 자바' 카테고리의 다른 글
부모, 자식, 상속, protected, extends (0) | 2024.02.27 |
---|---|
class, object, instance (0) | 2024.02.26 |
Static, None Static, JVM, Stack Area (0) | 2024.02.26 |
배열, 클래스, 기본배열, 객체배열 (0) | 2024.02.26 |
생성자/ 메서드 오버로딩? (0) | 2024.02.22 |