부트캠프 - 온보딩 강의
★ 배열과 클래스의 관계
1. 동일한 구조와 이질적인 구조
(1) 배열과 클래스는 데이터를 담는 역할에는 같다
(2) 차이점은 배열은 동일한 데이터를 담는 동일한 구조이고, 클래스는 이질적인 데이터를 담는 이질적인 구조이다
★ static과 JVM 메모리 모델 이해하기
1. static과 메모리의 관계
(1) 시작클래스는 왜 객체생성(new) 없이 실행이 될까?
(2) 메인 클래스가 동작하는 방식을 이해해야함
① JVM이 실행할 클래스를 찾는다(시작 클래스를 찾음)
② 찾은 후에, static 키워드가 붙은 멤버들을 메모리의 Method(Static) Area에 로딩됨. static 멤버들은 클래스를 사용하는 시점에 한번 메모리에 로딩됨. 우리는 시작 클래스에서 main이 static이므로 메모리에 로딩됨
③ JVM이 Method(Static) Area에 있는 main 메서드를 호출
④ call stack에 main을 넣고 동작을 시작한다
public class Static {
public static void main(String[] args) {
int result = sum(3, 5);
}
public static int sum(int a, int b) {
return a + b;
}
}
2. static과 non-static 멤버들의 접근 방법
(1) main메서드에서 instance를 하나 생성해서 heap에 메모리를 올린 후, 사용
3. JVM이 사용하는 메모리 영역
(1) Method Area
① static 변수와 static 메소드가 할당되는 공간
(2) Heap Area
① 객체가 생성되는 메모리 공간(new 연산자를 이용)
② 객체는 개발자가 직접 생성해서 Heap에 메모리가 할당되는데, 다 사용하면 소멸을 시켜줘야함
③ GC(가비지 컬렉터)가 메모리를 관리함 -> 주기적으로 Heap에 접근해서 만약 어떤 메모리를 가리키는 포인터가 없다면 청소됨
(3) Stack Area
① 메서드가 호출되면 기계어 코드를 할당받고 메서드가 실행되는 메모리 공간
② 스택처럼 위에 계속 쌓임(Last In First Out)
(4) Runtime Constant Pool(Literal Pool)
① 상수값 할당이 되는 메모리 공간(ex. 123, "apple")
4. 객체 생성과 static과의 관계
(1) 어떤 클래스의 모든 멤버가 static 멤버인 경우?
(2) 객체를 생성해서 static을 사용하는 것이 아닌, 클래스이름.static멤버 로 사용하게끔 하는 것이 더 바람직함
(3) 따라서, 생성자를 private로 만들어서 객체 생성을 막는다
5. Class, Object, Instance 구분하기
(1) Class : 객체를 모델링하는 도구
(2) Object : 클래스를 통해서 선언되는 변수
(3) Instance : 실체, 객체 생성에 의해 Heap 메모리에 만들어진 객체
코테준비
1. 프로그래머스 - JadenCase 문자열 만들기
: 간단한 문자열 문제
해야할게 너무 많다...ㅜㅜ 급하게 생각하지 말고 천천히 하나씩 완성해나가자. 천천히, 꾸준히란 말을 꼭 기억하자
만다라트를 한번 작성해보는 것도 좋은 방법인 것 같다. 오늘도 고생했다!!!
'TIL(Today I Learned)' 카테고리의 다른 글
2023.07.18 (0) | 2023.07.18 |
---|---|
2023.07.17 (0) | 2023.07.17 |
2023.07.13 (0) | 2023.07.13 |
2023.07.12 (0) | 2023.07.12 |
2023.07.11 (0) | 2023.07.11 |