1. 자바의 메모리 영역에 대해 설명해 주세요
2. 클래스와 객체에 대해 설명해 주세요
3. 생성자에 대해 설명해 주세요
4. Wrapper 클래스에 대해 설명하고, Boxing과 Unboxing에 대해 설명해주세요
5. Synchronized에 대해 아는대로 설명해주세요
6. new String()과 리터럴(””)의 차이를 설명해주세요
<aside>
💡
알게되었어요!
- Heap , Stack 메모리의 차이점
- Stack 메모리는 하나의 스레드가 사용될 때 쓰이는 메모리
- Heap 메모리는 여러개의 스레드가 공유하는 부분을 저장할 때 쓰이는 메모리
- class의 생성자와 record type의 차이
- class 같은 경우는 getter를 이용하여 내부 값에 접근해야하고, 불변 객체로 지정시 내부 객체들을 따로 불변 객체로 지정해줘야 한다.
- record 는 기본적으로 getter가 있으며, 내부 객체들도 final로 지정되어 있습니다.
기본적으로 canonical하게 생성자를 생성합니다.(모든 속성을 매개변수로 받는 것)
그러나 생성자를 만듦에 있어서 유연하지 못합니다.
가독성이 좋아 주로 DTO로 사용합니다. 클래스보다 가벼워서 쓰기도한다고 하기도….(클래스가 상위 클래스인 object를 상속받아 무겁기 때문)
- String
- new 연산으로 생성된 값은 ==이 아닌 비교연산자 .equals()로 같은 비교하고, 리터럴은 == 동등연사자와 .equals 연산자로 비교가 가능하다.
- +와 같은 산술연산자로 생성시에도 마찬가지이다. 리터럴을 더해서 생성하면 string pool 영역에 new 연산자를 사용하면 heap 영역에 생성된다.
- String constant pool vs Constant pool
- String Constant Pool은 heap 영역에 있는 리터럴의 String 값들을 저장하는 곳이고, Constant pool은 method 영역에 리터럴 상수값들을 저장하는 곳입니다.
- 생성자
- Factory Method 같은 경우 이름을 붙여 매개변수에 따라 서로 다른 생성자를 쓰게되는 것
- 반면 Builder 같은 경우는 속성값이 여러개인 객체를 생성시에 각각의 생성자를 만들어줄 필요 없이, 넣어주고 싶은 매개변수만 넣고(나머지는 null처리) 생성할 수 있다.
</aside>