JAVA 공부 22.11.19

Kim yohan·2022년 11월 19일
0

TIL

목록 보기
9/16

19단원 자바의 메모리 모델과 Object 클래스 클리어!

  1. 메모리 관리
    자바에선 JVM이 OS로부터 메모리를 받아와서 알아서 관리해준다.
    크게 세가지 영역으로 분리해서 관리함.
    (1) 메소드 영역 : 메소드의 바이트코드, static 변수
    -> 해당 클래스가 메모리에 올라가는 순간 다 올라감. 메소드의 바이트코드는 실행의 흐름을 형성하는 것.
    (2) 스택 영역 : 지역변수, 매개변수
    -> 해당 메소드 안에서만 존재하는 변수들을 저장함. 메소드를 벗어나는 순간 사라짐.
    (3) 힙 영역 : 인스턴스
    -> JVM이 적절하게 메모리에서 제거함. 더 이상 필요하지 않은 순간.

  2. 가비지 컬랙션 (Garbage Collection)
    -> JVM이 적절하게 인스턴스를 소멸하는 기능.

3.finalize() 메소드 (Object 클래스의)
해당 클래스의 인스턴스 소멸시 호출되는 함수.
Garbage Collection은 경우에 따라 실행되지 않기 때문에 (성능에 영향을 미치기 때문에)
확실히 실행시키려면 다음의 메소드를 사용해야함.
System.gc(); //명시적으로 가비지 컬렉션 수행.
System.runFinalization(); //완전히 소멸이 안된 인스턴스들의 finalize메소드 호출.

4.equals 메소드 (Object 클래스의)
==는 참조변수의 값만 비교.
인스턴스에 저장되어 있는 값을 비교하기 위해서 equals 메소드 사용.
기본적으로 equals 메소드는 참조변수의 값만 비교하기 때문에, 오버라이딩해서 사용한다.
이미 오버라이딩 되어 있는 클래스도 있음! (e.g. String..)

5.clone 메소드 (Object 클래스의 )
인스턴스를 복사하는 메소드. 단, Cloneable 인터페이스를 구현해야함.
Cloneable은 비어있는 인터페이스인데, 단순히 해당 클래스가 clone해도 되는지 명시하기 위해 사용된다.
기본적으로 clone메소드는 protected로 선언되어 있기때문에, 필요에 따라 public으로 오버라이딩한다.

clone메소드는 인스턴스 변수에 저장된 값만 복사할 뿐, 인스턴스 변수가 참조하는 대상까지 복사하지 않는다!! 즉, 인스턴스 변수가 클래스일 경우에 깊은 복사를 할려면, clone메소드를 오버라이딩해서 직접 넣어줘야한다.
단, String의 경우엔 필요없고 대신 Change 메소드를 하나 만들어서 새로운 String 값으로 변경할 수 있도록 설계한다.

profile
꾸준히 성실하게

0개의 댓글