부트캠프 - 온보딩 강의

★ 배열과 클래스의 관계

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

+ Recent posts