JAVA 자바 기술 면접(컴파일, 인터프리터, thread safe)

JAVA 자바 기술 영상 등 참고해서 공부한 내용 정리하려고 합니다.

오늘은 컴파일, 인터프리터, String, StringBuilder, StringBuffer, Thread safe에 대한 내용 정리입니다.

  1. 자바 컴파일 과정
    • 1. 개발자 .java파일 생성 후 컴파일 할 경우 build 진행
    • 2. build 실행.
    • 3. java compliler javac의 명령어 통해 바이트코드(.class) 생성
    • 4. class loader 통해 jvm내로 로드
    • 5. 실행엔진 통해 컴퓨터가 읽을 수 있는 기계어로 해석(각 운영체제에 맞는 기계어) RunTime Data Area에 배치

(바이트 코드 : 고급언어로 작성된 소스 코드를 가상머신이 이해할 수 있는 중간 코드로 컴파일 진행)

  1. 1) 컴파일러와 인터프리터 언어의 차이점
    • 컴파일 언어는 작성한 소스 코드를 컴퓨터가 알아볼 수 있는 기계어로 번역 후 번역된 코드를 한번에 실행하는 두 단계를 거쳐 진행. 번역과 실행이 따로 이루어진다. 번역은 컴파일 통해서 진행되며, 예시 언어는 C, C++, GO, JAVA 등 있습니다.
      • 특징
      • 규모 클 경우 컴파일 시 오래 걸릴 수 있습니다.
      • 하지만 컴파일이 완료 된 경우 빠른 속도로 실행을 할 수 있습니다. (컴파일 후 기계어로 변환되었기 때문)
      • 운영체제 이식성 낮습니다. (기계에 종속되어 코드 생성되기 때문에 기계가 달라지면 같은 코드를 새로 컴파일 해야하기 때문)
      • 오류 발견이 어려운점이 있습니다.
    • 인터프리터 언어는 프로그램 실행 시 인터프리터 사용하여 코드를 한 줄 씩 읽어나가며 실행합니다. 고급 프로그래밍 언어로는 JavaScript, Python, SQL, R 등 있습니다.
      • 컴파일 언어와 반대로 바로 바로 읽기 때문에 프로그램 이식성이 좋습니다.
      • 오류 발생할 경우 읽던 부분에서 멈추게 되기 때문에 오류 발견에 좋습니다.
      • 컴파일 과정 없기 때문에 오류에 대한 수정도 빠릅니다.
      • 하지만 실행속도가 느립니다.
  2. String, StringBuilder, StringBuffer 차이점
    • String 객체 불변으로 변하지 않는 문자열은 String을 사용.(변하지 않는 문자열 저장 시 적합)
    • StringBuilder(가변) 비동기식으로 Single Thread 환경하에서, 변화되는 문자열 사용, 비동기방식으로 처리속도가 제일 빠름.
    • StringBuffer(가변) 동기식으로 저장되기 때문에 멀티쓰레드로 접근 or 문자열 변경될 경우 사용
    • 2-1. thread safe : 비동기는 thread safe 하지 않으며, 동기는 thread safe 함.
      • thread safe : 멀티 쓰레드 프로그래밍에서, 어떤 공유 자원에 여러 쓰게드가 동시에 접근해도, 프로그램 실행에 문제가 없는 상태를 말합니다.
      • thread safe 지키는 4가지
      • 1) Mutual exclusion(상호 배제), 2)Atomic operation(원자 연산), 3) Thread-local storage(쓰레드 지역 저장소) 4) Re-entrancy(재진입성) 있습니다.
      • 1) Mutual exclusion(상호 배제)
      • 공유자원에 하나의 Thread만 접근할 수 있도록, 세마포어/뮤텍스로 락을 통제
      • 예시) 파이썬은 Thread Safe하게 메모리 관리 하지 않으므로, GIL을 사용해 Thread Safe 보장
      • 2) Atomic operation(원자 연산)
      • 공유자원에 원자적으로 접근하는 방법
      • 3) Thread-local storage(쓰레드 지역 저장소)
      • 공유 자원의 사용을 최대한 줄이고, 각각의 쓰레드에서만 접근 가능한 저장소들을 사용해 동시 접근을 막음
      • 4) Re-entrancy(재진입성)
      • 쓰레드 호출과 상관없이 프로그램에 문제가 없도록 작성

참고사이트

Thread safe

이전에 제가 공부했던 내용 추가로 보실 분은 링크 또는 메인 페이지 참고해주세요.

이전 글 공부 도커

Leave a Comment