CS
배열과 연결리스트 차이는?
배열 배열은 인덱스를 가짐. 원하는 데이터를 한번에 접근하기 때문에 접근 속도 빠름. → 시간 복잡도는 O(1) 크기 변경이 불가능하며, 데이터 삽입 및 삭제 시 그 위치의 다음 위치부터 모든 데이터 위치를 변경해야 되는 단점 존재 ( 삽입, 삭제가 연결리스트에 비해 불리한 이유 ) 연결리스트 연결리스트는 인덱스 대신에 현재 위치의 이전/다음 위치를 기억함. 크기는 가변적. 인덱스 접근이 아니기 때문에 처음부터 순차적으로 탐색해야 한다. (따라서 배열보다 속도 느림) → 시간 복잡도 O(n) 질문) 왜 연결리스트는 검색할 때, 처음부터 순차적으로 탐색해야 하는가? 답변) 노드는 연속된 메모리 공간에 존재하지 않고 모두가 떨어져 있기 때문이다. 탐색을 위해서는 각 노드가 기억하고 있는 앞의 데이터와 뒤의 ..
역직렬화란?
바이트로 변환된 데이터를 다시 객체로 변환하는 기술 직렬화 된 바이트 형태의 데이터를 객체로 변환해서 JVM 으로 상주시키는 형태 기술 자바 역직렬화 조건 직렬화 대상이 된 객체의 클래스가 클래스 path 에 존재해아하며 import 되어 있어야 한다. 중요한 점은 직렬화와 역직렬화를 진행하는 시스템이 서로 다를 수 있다는 것을 반드시 고려해야 한다 (같은 시스템 내부이라도 소스 버전이 다를 수 있다.) 자바 직렬화 대상 객체는 동일한 serialVersionUID 를 가지고 있어야 함 Reference) https://github.com/gyoogle/tech-interview-for-developer/blob/master/Language/%5BJava%5D%20%EC%A7%81%EB%A0%AC%ED%..
직렬화란?
자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술 질문 - 왜 바이트 형태로 데이터를 변환해야 하는가? 답변 - 각자 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에, Reference Type의 데이터들은 인스턴스를 전달 할 수 없다. 따라서, 이런 문제를 해결하기 위해선 주소값이 아닌 Byte 형태로 직렬화된 객체 데이터를 전달해야 한다. 자바 직렬화 조건 자바 기본(primitive) 타입 java.io.Serializable 인터페이스를 상속받은 객체 Reference) https://github.com/gyoogle/tech-interview-for-developer/blob/master/L..
Java의 메모리 영역은?
배경 & 질문 의도 JVM 구조의 이해 답변 메소드, 힙, 스택, pc 레지스터, 네이티브 영역으로 구분됩니다. 메소드 영역은 클래스가 로딩될 때 생성되며 주로 static 변수가 저장됩니다. 힙 영역은 런타임시 할당되며 주로 객체가 저장됩니다. 스택 영역은 컴파일시 할당되며 메소드 호출시 지역변수가 저장됩니다. pc 레지스터는 스레드가 생성될 때마다 생성되는 영역으로 다음 명령어의 주소를 알고 있습니다. 네이티브 영역은 자바 외 언어로 작성된 코드를 위한 영역입니다. 힙과 스택은 같은 메모리 공간을 동적으로 공유하며, 과도하게 사용하는 경우 OOM 이 발생할 수 있습니다. 힙 영역은 GC 를 통해 정리됩니다. 키워드 & 꼬리 질문 Method Area (Class Area) 클래스가 로딩될 때 생성됩니..

자바 컴파일 과정
들어가기전 자바는 OS에 독립적인 특징을 가지고 있습니다. 그게 가능한 이유는 JVM(Java Vitual Machine) 덕분인데요. 그렇다면 JVM(Java Vitual Machine)의 어떠한 기능 때문에, OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보도록 하겠습니다. 자바 컴파일 순서 개발자가 자바 소스코드(.java)를 작성합니다. 자바 컴파일러(Java Compiler)가 자바 소스파일을 컴파일합니다. 이때 나오는 파일은 자바 바이트 코드(.class)파일로 아직 컴퓨터가 읽을 수 없는 자바 가상 머신이 이해할 수 있는 코드입니다. 바이트 코드의 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있습니다. 컴파일된 바이트 코드를 JVM의 클래스로더(Cl..

가비지 컬렉션이란?
가비지 컬렉션이란? 자바가 실행되는 JVM 에서 사용되는 객체, 즉 Heap 영역의 객체를 관리해 주는 기능을 말합니다. 사용하지 않는 객체는 메모리에서 삭제하는 작업을 GC라고 부르며 JVM에서 GC를 수행합니다. 이 과정에서 stop the world 가 일어나게 되며, 이 일련 과정을 효율적으로 하기 위해서는 가비지 컬렉터 변경 또는 세부 값 조정이 필요합니다. JVM의 메모리는 총 5가지 영역(class, stack, heap, native method, PC)으로 나뉘는데, GC는 힙 메모리만 다룹니다. 일반적으로 다음과 같은 경우에 GC의 대상이 됩니다. 객체가 NULL인 경우 (ex. String str = null) 블럭 실행 종료 후, 블럭 안에서 생성된 객체 부모 객체가 NULL인 경우..

JVM이란?
자바 가상 머신(Java Virtual Machine) 시스템 메모리를 관리하면서, 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경을 제공함 JVM은, 다른 프로그램을 실행시키는 것이 목적이다. 갖춘 기능으로는 크게 2가지로 말할 수 있다. 자바 프로그램이 어느 기기나 운영체제 상에서도 실행될 수 있도록 하는 것 프로그램 메모리를 관리하고 최적화하는 것 JVM은 코드를 실행하고, 해당 코드에 대해 런타임 환경을 제공하는 프로그램에 대한 사양임 개발자들이 말하는 JVM은 보통 어떤 기기상에서 실행되고 있는 프로세스, 특히 자바 앱에 대한 리소스를 대표하고 통제하는 서버를 지칭한다. 자바 애플리케이션을 클래스 로더를 통해 읽어들이고, 자바 API와 함께 실행하는 역할. JAVA와 OS 사이에서 중개자 ..