자바 메모리 구조

 

- 메서드 영역: 모든 영역에서 공유, 클래스 정보, static

- 스택 영역 : 지역변수, 중간 연산 결과, 메소드 호출정보(종료되면 stack에서 삭제), 각 쓰레드 별로 생성됨

- 힙 영역 : 객체(인스턴스), 배열이 생성되는 영역 , GC가 이루어지는 영역

 

* 인스턴스는 내부에 변수와 메소드를 가진다. 하지만 인스턴스가 생성될 때, 변수에는 메모리(힙에)가 할당 되지만 메서드에 대해서는 새로운 메모리를 부여하지 않는다. 메서드는 메서드 영역에서 코드를 호출하여 수행하게 된다.

 

static 

 

- 인스턴스 끼리 공유할 수 있게 한다. (메서드 영역을 참조), 붕어빵 틀에서 나온 

- static이 붙은 필드를 클래스,static, 정적 변수라고 함(static 안 붙은 필드는 인스턴스 변수)

- static이 붙으면 클래스 붙어서, 메서드 영역에 생성 된다! (클래스 레벨)

- static 메소드는 객체 생성 없이 사용은 가능 하지만, 당연히 인스턴스 레벨단에 변수나 메서드에는 접근X(컴파일 에러)

- main함수도 static 이여서 객체 생성 없이 사용이 가능했던 것, 따라서 정적메소드인 main에서 객체 생성 없이 다른 메소드를 호출하려면 당연히 그 메소드도 정적 메소드인 static 이여야 함

 

final 

 

final은 메소드 ,클래스, 변수에 다 사용 가능하다. 매우 유용한 제약(제약이 많아야 좋은 코드다.)

final은 최초 선언 후, 딱 1번만 값 할당 가능하다.

 

상수 사용이유 : 유지보수가 편해지고, 매직넘버(코드를 읽을 때 보이는 숫자, 수정자는 이 숫자의 의미를 알기 쉽지 않음)를 없앨 수 있다.

 

 

 

 

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기