JAVA 메모리 모델 /Object Class /기본 Class


메모리 모델


  • 자바 가상머신은 운영체제 위에서 동작
  • 운영체제에서 메모리를 할당받아 사용되며 이를 관리하게 세가지로 나뉘는데 종류와 저장되는 파일들은
    • 메소드 영역 - 메소드의 바이트코드, static 변수
    • 스택 영역 - 지역변수, 매개변수
    • 힙 영역 - 인스턴스
  • 메소드 영역
    • 실행 흐름을 형성하는 메소드의 바이트코드를 저장시키는 부분
    • 바이트 코드와 static 변수는 '클래스가 메모리에 올려지는 시점'에 저장됨
    • 메소드의 바이트코드는 프로그램의 흐름을 구성하는 바이트 코드이고 사실상 컴파일 된 바이트 코드의 대부분이므로 바이트 크도 전체가 메소드영 역에 저장된다고 봐도 무방
  • 스택 영역
    • 메소드 내에서만 유효한 변수인 지역변수, 매개변수를 저장
    • 즉, 스택으로 관리하기 편한 변수들을 저장 관리하는 것
  • 힙 영역
    • 인스턴스는 소멸방법과 시점이 지역변수와 다르기 때문에 따로 저장
    • 인스턴스로 힙에 저장되고 변수들은 이 인스턴스를 참조하는 형식으로 사용
    • Garbage Collection
      • 자바에서 인스턴스를 힙에서 소멸시키기 위해 사용하는 것
      • null로 참조변수를 해당 인스턴스를 가르키기 않도록하여 소멸시킴


Object 클래스

  • 모든 자바 클래스의 최상위 클래스
  • finalize 메소드
    • 인스턴스가 소멸되기 전 가상머신에 의해 자동 호출되는 메소드
    • 이를 제대로 활용하기 위해선
       System.gc();
       System.runFinalization();
      를 사용하면 제대로 사용 가능
  • equal 메소드
    • public boolean equals(Object obj)로 정의되어 있고 '=='연산자 처럼 참조 값을 비교하도록 오버라이딩 하여 사용가능
    • String 클래스의 경우는 이미 내용비교를 오버라이딩 하였으므로 그대로 사용가능
  • clone 메소드
    • 인스턴스를 복사하는 메소드
    • Cloneable 인터페이스를 구현해야 함
      • 비어있는 인터페이스
      • 복제가 가능하다는 것을 표현하기 위해서 사용
    • clone메소드가 protected로 선언되어있어서 이를 public으로 변경하여 오버라이딩 가능
    • Clone의 복사방법
      • Shallow Copy
        •  인스턴스 변수의 저장값만 복사하고 참조 대상은 복사하지 않음
        • 이 방식으로 하면 복사된 값이 복사대상의 값이 변경되면 같이 변경됨
      • Deep Copy
        • 참조하는 대상까지 같이 복사를 해주어서 각각의 복사대상과 복사된 값의 인스턴스를 따로형성
        • 이를 통해서 복사된 값은 독립된 인스턴스를 갖고 변경을 따로해야 함
        • String의 경우는 저장된 문자열 정보를 변경 불가능 하기 때문에 필요없음
          이는 String이 변경시에  인스턴스를 생성하는 것이기 때문


기본클래스

  • Wrapper Class
    • 기본 자료형 데이터들을 인스턴스로 표현할 때 사용
    • Boolean, Character, Byte, Short, Integer, Long, Float, Double으로 각각 기본 자료형은 모두 정의되어 있음
    • 기본 자료형 데이터를 인스턴스화 시키는 것을 Boxing이라 함
    • 자료형 데이터를 인스턴스에서 꺼내는것을 Unboxing 이라함
    • 현재는 Auto Boxing, Unboxing 가능 => 선언 따로 안하고 자동으로 인스턴스와 데이터 교환가능
    • 선언 방법으로는 new를 이용한 방법, static 메서드를 이용한 방법 두가지
  • BigInteger Class
    • 너무 큰 정수를 표현하면 Integer로 표현이 안되는데, 이를 BigInteger로 표현함
    • 자료형이 없기에 문자열을 통해서 값을 정의함
  • BigDecimal Class
    • 오차가 없는 실수를 저장하기 위한 방법
    • 값을 저장할때 문자열로 저장해야 하기 때문에 " " 사이에 값을 넣어줌
  • Math Class
    • 수학 관련 기능 제공 모든 멤버가 static
  • Random Class
    • boolean nextBoolean() : boolean형 난수 반환
    • int nextInt() : int형 난수 반환
    • long nextLong() : long 형 난수 반환
    • int nextInt(intn) : 0이상 n미만 범위 내에 있는 int형 난수 반환
    • float nextFloat() : 0.0이상 1.0 미만의 flaot형 난수 반환
    • double nextDouble() 0.0이상 1.0미만의 double형 난수 반환
    • Seed를 전달해서 난수를 생성하면 같은 seed 값을 넣으면 항상 같은 난수가 생성
  • Token 구분
    • 정보를 나누는 기준을 'Delimiter(구분자)'이고, 이를 기준으로 나눈어진 정보가 Token
    • public StringTokenizer(String str, String delim) -> 문자열을 구분자 기준으로 토큰 추출
    • public String nextToken() -> 다음 토큰 반환
    • public boolean hasMoreToken -> 토큰 잔여유무 확인

댓글

이 블로그의 인기 게시물

KV Language(Pycharm에 Highlighting 기능 설정하기)

Python 코딩 공부 시작과 Github 활용

Kivy Tutorial - PingPong