📌 알게 된 개념들
- 클래스를 로딩하는 시점을 파악하라
- 필드 초기화, 스태틱 초기화 블럭, 인스턴스 초기화 블럭, 생성자에 대한 이해를 한다.
- 그림을 그린다 = 시각적으로 남겨라 기억에 오래 남는다.
- 메모리는 2차원이 아니다 바이트배열의 집합이다
- 상대적인 주소 =
offset
(용어기억)
- 상대적인 주소 =
- new = 인스턴스 생성 + 부가 정보(어떤 클래스의 어떤 인스턴스필드인지등) 기억하자!
- 즉 안에 인스턴스 필드가 없어도 인스턴스가
heap에 생성된다.
- 즉 안에 인스턴스 필드가 없어도 인스턴스가
- 레퍼런스 변수를 선언할 때는 클래스를 로딩하지 않는다.
// 예) A obj;- static필드 , instance필드 = 자동 초기화 됨 , 로컬변수는 자동 초기화 안됨
- 코드 타입 숫자로 한다 => 상수로 지정 (의미있는 변수 이름으로)
실무
=> 일단 인스턴스 메서드로 무조건 만들라!
=> 인스턴스 변수를 완전히 사용하지 않음을 확신하면
그 때 클래스 메서드로 전환하라!
- this는 무조건 붙여야하는데 생략하면 컴파일러가 자동으로 붙여준다.
- 메서드 호출할 때 넘겨주는 주소가 무엇인지에 따라 this에 들어올 주소가 다르다.
- class 파일을 뜯어보면 this가 있다.
- 이름에 인스턴스가 붙었다고 해서 인스턴스 메서드가 Heap에 만들어지는 것이라는 착각을 하지 마라!
- 클래스의 모든 코드는 Method Area 영역에 로딩 된다.
- 인스턴스 메서드를 호출하려면 인스턴스 주소를 주면서 호출해야한다!!
- 모든 클래스는 반드시 한 개 이상의 생성자가 있다.
- 생성된 인스턴스가 제대로 쓰일 수 있도록 유효한 값으로 초기화시키는 일을 한다.
- 생성자 내에 중복되는 코드가 있을떄 this()로 호출한다.
- package member class, top level class
- nested class
- static 블록을 여러개 만들면?
- static 블록은 여러개 만들어도 어차피 컴파일 되면 하나로 합쳐진다. (여러개 만들 필요 없겠죠?)
- 클래스 로딩 > 스태틱 변수 > 스태틱 블럭
- 클래스가 로딩될 때 스태틱 초기화 블록은 실행된다
- 클래스가 로딩하는 시점?
- 클래스 멤버(필드와 메서드)를 최초로 사용할 때
- 해당 클래스의 인스턴스를 최초로 생성할 때
- 레퍼런스를 선언하면 클래스가 로딩된다?
- 로딩되지 않는다.
- 클래스는 한번 로딩되면 다시 로딩되지 않는다.
- 클래스의 정보를 다루는 클래스 Class
- 인스턴스 초기화 블럭 = 생성자 안에 들어감
- 여러 개의 생성자가 있으면,
- 존재하는 모든 생성자의 앞 부분에 삽입된다.
- 모든 생성자에 공통적으로 들어갈 것이라면 별도의 인스턴스 초기화 블럭으로 뺀다.
- 인스턴스 초기화 블럭이든 필드 초기화 문장이든 선언된 순서대로 생성자 앞쪽 배치
- 인스턴스 블록 <= 실무에서는 인스턴스 블록을 잘 사용하지 않는다. 대신에 생성자를 주로 사용한다
'TIL' 카테고리의 다른 글
🚀 bitcamp TIL (21.07.29) (0) | 2021.07.29 |
---|---|
🚀 bitcamp TIL (21.07.28) (0) | 2021.07.28 |
🚀 bitcamp TIL (21.07.26) (0) | 2021.07.26 |
🚀 bitcamp TIL (21.07.23) (0) | 2021.07.23 |
🚀 bitcamp TIL (21.07.22) (0) | 2021.07.22 |