자바의 신 1권 회고

jj J·2022년 10월 27일
1

JAVA

목록 보기
4/15

자바의 신 1권을 2회독한 기념, 회고를 작성하려한다.

  1. String이 참조자료형인 이유?
    기본자료형은
  2. 기본 자료형과 참조 자료형의 차이?
  • null이 될 수 있냐 없냐 = 기본값이 있냐 없냐
  1. 프로세스와 스레드 메모리 구조 차이?
  • https://becomeweasel.me/process-and-thread/
  • 링크 참조해서 추가 공부 필요
  • 프로세스 : Code, Data, Stack, Heap으로 나뉨
  • Code : 프로그램 코드 정보가 기계어로 번역되어 저장되어 있는 영역
  • Data : 전역 변수, Static 변수등 프로그램이 사용하는 데이터를 저장하는 영역
  • Stack : 함수 복귀 주소 값, 매개변수, 지역 변수 등을 저장하는 공간
  • Heap : 런타임에 메모리 할당시 저장되는 공간
  • 스레드 : 힙/데이터/코드 영역은 프로세스 내에서 공유하고 각자의 레지스터, 스택 영역을 가짐
    멀티 스레드는 스택 영역에 대해서 스레드의 수만큼 분할해서 사용한다. 그렇기 때문에 하나의 메모리 구조에서 stack 영역만 나눠서 쓰는 구조고, 하나의 스레드에서 다른 스레드의 stack 영역은 접근하지 못하는 특성을 이용해서 Thread Safe를 확보한다.
  1. HashSet이란?(중요)
    중복과 순서가 없는 자료구조. 새 객체를 추가하기 전 hashCode와 equals로 중복체크 후 저장
    String클래스가 hashCode()와 equals() 메소드를 재정의해서 같은 문자열일 경우 hashCode()의 리턴 값을 같게, equals()의 리턴 값은 true가 나오도록 함
  2. 배열과 링크드리스트 차이?
    성능 관점에서 배열은 데이터 검색 시 링크드리스트는 추가/삭제 시 빠름
    배열은 데이터 검색 시 인덱스를 가지고 O(1)로 찾지만 링크드 리스트는 하나씩 순회해야해서 느림
    그리고 메모리 관점에서는 배열은 정적으로 사용할 크기 만큼 미리 공간을 할당해놔야하지만 링크드 리스트는 필요할때마다 하나씩 동적으로 추가할 수 있어 공간 효율성이 좋다
  • 자료구조 설명할 땐 성능/메모리 관점으로 나누어서 설명한다.
  • 성능 관점 얘기할 때 한정자를 지어 얘기하지 않아 내용 설명이 복잡해졌다.
  • 순차접근, 랜덤접근, 맨앞, 맨뒤, 중간 등
  1. Pass by Value, Pass by Reference 차이?
  • 간단한 설명과 함께 DeepCopy 등으로 해결했다는 경험을 덧붙이면 좋음
  • Pass By Value : 복사된 데이터를 전달해, 값을 수정해도 원본 데이터에는 영향을 주지 않도록 하는 방식.
  • 예시 : 함수에 파라미터로 전달된 변수의 값을 함수 실행 시 Stack 영역에 같은 값을 가진 객체로 복제해 처리한다
  • Pass By Reference : 주소 값을 전달하여, 값을 수정하면 원본의 데이터가 수정되도록 하는 방식
  • 자바에서는 기본적으로 Pass By Value 방식을 채택하나 객체에 한해 Pass By Reference가 적용된다. 객체를 전달하면 해당 인스턴스가 복제되어 전달되기 때문에 객체 필드값에 접근하여 해당 값을 수정하는건 가능하지만 객체 자체는 변경이 불가능하다
  1. 접근 제어자가 필요한 이유?
  • 정보 은닉을 위해서이다. 클래스 외부에서 직접적인 접근을 허용하지 않도록 설정하여 정보 은닉을 구체화 할 수 있다.
  1. Collection 시간 복잡도 정리
    https://www.grepiu.com/post/9

그 외 추가로 알아보면 좋을 것(슬랙 키워드 참조)
1. MSA
2. 코루틴, 이벤트 루프 (경량 스레드)
3. 리액티브 프로그래밍

핵심 키워드

  1. Java Collection 성능과 메모리, O(n)
  2. GC
  3. 프로세스와 쓰레드, 메모리 구조
profile
매일 발전

0개의 댓글