Day12
오늘은 어제에 이어 인스턴스 멤버와 정적 (static) 멤버에 대해 배웠다. 생각보다 오늘은 진도가 많이 나가지 않았는데 그건 Clazz라는 개념을 배웠기 때문... 시중에 어떤 책에도 없는 내용이지만 중급 레벨로 넘어가려면 이 개념을 반드시 이해해야한다고 장장 2시간에 걸쳐 열정적으로 강의하셨는데 이건 뭐 이해가 될 듯하다가도 이해가 안 되는... 참 답답한 상황이었다. 책에서 찾아보려해도 책에는 없는 내용이고, 구글링을 해도 정보가 없거나 clazz는 class라고 생각하면 된다 이런 내용이나 나오고... 그나마 다행이 점 2가지는 나 뿐만이 아니라 우리 조원들을 비롯한 우리 반 대부분이 이해를 잘 못했고, 강사님도 앞으로 계속 반복해서 설명해주실 것이니 너무 걱정 말라고 말씀하셨다. 굳이 오늘 다 이해하려고 하기 보다는 그냥 내가 이해한만큼만 받아들이고 넘어가야겠다~!
인스턴스멤버
객체(인스턴스)마다 가지고 있는 필드와 메소드
인스턴스 멤버는 객체에 소속되어 있기 때문에 객체 없이 사용 불가
인스턴스는 객체를 무조건 생성해야 사용가능
정적멤버
객체 내부에 존재하지 않고 메소드 영역에 존재
정적 멤버는 객체를 생성하지 않고 클래스로 바로 접근해 사용
필드 또는 메소드 선언할 때 static 키워드를 붙인다
static 없으면 인스턴스 멤버
static 있으면 정적 멤버
static 붙이면 모든 객체에 공용임 어떤 객체에서도 고정된 값으로 사용 가능
정적 필드나 정적 메소드는 static키워드 붙여서 만든다
1. 원주율 파이값처럼 어땐 객체에서나 똑같은 값으로 공유되어야한다면 static 붙여서 정적 필드로 만든다
2. 매개변수만으로도 실행가능하거나 메소드의 성격상 모든 객체에 공용으로 쓰인다면 static 붙여서 정적 메소드로 만든다
인스턴스 필드는 생성자에서 초기화
정적 필드는 static initializer에서 초기화함
대전제1: 정적멤버는 정적멤버답게 사용하라! (타입명.멤버)
대전제2: this라는 키워드 오로지 인스턴스 메소드안에서만 사용가능! (static 붙으면 this 못쓴다)
대전제3: 인스턴스 멤버는 다른 인스턴스 멤버 + 정적멤버까지 모두 사용가능!
정적 멤버는 오로지 다른 정적멤버만 사용가능!!
------------------------------------------------------------------------------------------------
인스턴스는 힙에 있는 객체에 생성
정적 멤버는 메소드 영역 안의 clazz 객체 클래스에 생성
(java.lang.Class)
A.class ----바이트코드읽음----> [ClassLoader] -------> Clazz객체생성 -------> 메소드 영역에 꽂아넣음
메소드 영역에 있는 모든 Clazz객체는 Class타입임
정적멤버는 java.lang.Class 타입의 Clazz객체에 소속된 멤버
새로운 객체를 힙에 만들때 일딴 메소드영역의 clazz에 있나보고 그 주소를 활용해 힙에 객체 생성한다
clazz에 없으면 힙에 객체를 만들 수 없다
클래쯔 객체는 클래스에 대한 모든 바이트코드를 가지고 있다. 그 중에 정적 멤버가 있다
이 바이트 코드를 메소드 영역에 꽂아 넣는다. 그니까 정적멤버는 메소드 영역에 있는거임
인스턴스 멤버는 힙영역에 저장
'국비학원' 카테고리의 다른 글
[국비지원] KH 정보교육원 14일차 (0) | 2022.04.12 |
---|---|
[국비지원] KH 정보교육원 13일차 (첫 테스트!) (0) | 2022.04.09 |
[국비지원] KH 정보교육원 11일차 (0) | 2022.04.07 |
[국비지원] KH 정보교육원 10일차 (0) | 2022.04.06 |
[국비지원] KH 정보교육원 9일차 (0) | 2022.04.05 |