기술 창고/Java(20)
-
[Java] JVM (Java Virtual Machine)
JVM 자바 가상 머신을 줄여서 JVM이라고 한다. JVM은 OS(운영체제)와 Java 애플리케이션 사이의 중개자 역할을 한다. JVM은 자바 바이트코드를 실행할 수 있는 환경을 제공해준다. 자바 원 소스 코드(java file)을 자바 컴파일러를 통해서 자바 바이트 코드로 바꾼다.(class file) 이로 인해 자바 바이트 코드가 어떠한 플랫폼에서든 독립적으로 실행될 수 있게 된다. 즉, JVM 덕분에 OS 상관없이 어디서든 Java 애플리케이션을 실행할 수 있게 되는 것이다. JVM 구성 1. Class Loader (클래스 로더) JVM 내에서 바이트 코드 (class flie)을 Loading하고, Linking을 통하여 배치하는 작업을 수행하는 모듈이다. Runtime 시점에서 클래스를 로딩하..
2023.01.11 -
[Java] 동일성 (Identity) / 동등성 (equality)
동일성 동일성은 두 개의 객체가 완전히 같은 경우를 뜻한다. 좀 더 늘려서 말하자면 두 객체는 사실상 하나의 객체로 봐도 되고, 주소 값이 같아서 두 변수가 같은 객체를 가리키는 것과 같다. 즉, 주소 값이 동일한 경우를 동일하다고 말한다. 동일한지 알 수 있는 방법은 "==" 연산자를 통해 확인할 수 있다. 참고로 원시타입(Primitive Type)의 변수들은 객체를 참조하고 있는 것이 아닌 원초적인 변수들이므로 == 연산자를 사용했을 때 내용값이 같다면 동일하다고 판단한다. 동등성 두 개의 객체가 같은 정보값을 같고 있는 경우를 뜻한다. 동등성은 변수가 참조하고 있는 객체의 주소가 다르더라도 내용값만 같으면 동등하다고 말한다. 즉, 주소 값이 서로 다르더라도 값만 같으면 동등하다고 말한다. 동등한지..
2023.01.09 -
[Java] Java Map 내부 구현 파악
Java 에는 Map 이라는 인터페이스 도구가 있다. 대표적으로 Map, HashMap, TreeMap, LinkedHashMap이 있다. 각 Map 인터페이스들의 구조에 대해 정리해보자. Map 기본적으로 Map은 key-value 구조로 구성되어 데이터를 저장할 수 있다. key를 가지고 저장된 value를 찾을 수 있다. key를 이용하여 데이터 검색에 최적화되어있으나, 동일한 key 에 다른 데이터 value가 저장되어 있을 경우 기존에 저장된 데이터는 덮어씌워져 사라진다. 따라서, 중복된 key는 존재할 수 없다. HashMap HashMap은 Hash Table 을 이용하여 만들어졌다. Hash Table은 key 와 value를 저장하며, key를 이용하여 빠르게 데이터를 찾기 위한 자료구조..
2023.01.06 -
[Java] Garbage Collector
개발을 진행하다보면 유효하지 않은 메모리, 말 그대로 쓰레기(Garbage) 메모리가 발생하게 된다. 내가 주로 사용하는 언어인 Java 에서는 JVM의 Garbage Collector가 불필요한 메모리를 알아서 정리해준다고 한다. Minor Garbage Collector / Major Garbage Collector JVM의 Heap영역은 처음 설계될 때 다음의 2가지를 전제(Weak Generational Hypothesis)로 설계되었다. 대부분의 객체는 금방 접근 불가능한 상태(Unreachable)가 된다. 오래된 객체에서 새로운 객체로의 참조는 아주 적게 존재한다. 즉, 객체는 대부분 일회성되며, 메모리에 오랫동안 남아있는 경우는 드물다는 것이다. 그렇기 때문에 객체의 생존 기간에 따라 물리..
2023.01.06 -
[Java] Call by Value / Call by Reference
메소드를 호출할 때 파라미터를 전달하는 방법에는 두 가지가 있다. Call by Value 메소드를 호출할 때 값을 넘겨준다. 메서드를 호출하는 호출자 (Caller) 의 변수와 호출 당하는 수신자 (Callee) 의 파라미터는 복사된 서로 다른 변수이다. 값만을 전달하기 때문에 수신자의 파라미터를 수정해도 호출자의 변수에는 아무런 영향이 없다. Call by Reference 참조(주소) 를 직접 전달하여 넘긴다. 참조를 직접 넘기기 때문에 호출자의 변수와 수신자의 파라미터는 완전히 동일한 변수이다. 메서드 내에서 파라미터를 수정하면 그대로 원본 변수에도 반영된다. 내가 주로 사용했던 자바에서는 오직 Call by Value 로만 동작한다고 한다. Java 의 Call by Value 에 대해 이해하기..
2023.01.06 -
[Java] DI (의존성 주입) / IoC (제어의 역전)
스스로 프로젝트를 진행하면서 코드를 짜다보면 명확하게 모르고 두루뭉실 아는 상태에서 사용하는 코드들 혹은 개념들이 많다고 느낀다. 그 중에서 DI는 가장 흔히 사용하고 있음에도 불구하고 뭔지 잘 모르고 있는 것 같아 정리해야할 필요가 있어보인다. IoC (제어의 역전) IoC를 해석하게 된다면 '제어의 역전' 이라고 부르는데, 이는 개발적인 개념에서 객체의 생성, 생명 주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 뜻한다. Spring을 사용한다면 모든 객체에 대한 제어권은 개발자인 본인이 가지고 있는 것이 아니라 Spring이 알아서 관리하고 제어한다는 것이다. IoC 컨테이너 컨테이너라는 것은 보통 객체의 생명주기를 관리하고, 생성된 인스턴스들에게 추가적인 기능들을 제공하도록 하는 것이다..
2023.01.06