[JAVA] GC, G1GC
·
java
그동안 얕게 알고 쓰던 자바를 정리하기 위한 포스팅 / 개인 기록용 자바를 사용한다면 Garbage Collector 일명 GC라는 것을 듣게 된다. 원래 C언어는 메모리를 동적으로 할당하고 나면, 원래 직접 개발자가 정리를 해주어야한다.그러나 자바에서는 아무리 객체를 새로 생성해도 개발자가 직접 객체를 정리하지 않는다. 왜냐하면 GC가 알아서 해주기 때문이다. JAVA 환경에서 JVM의 Heap 영역은 Young, Old 영역으로 구분되어 있으며 새로 생성되는 객체는 Young 영역에 저장되게 되며Young 영역이 꽉 차게 되면 Young 영역을 한 번 쓱 훑어서 사용되지 않는 객체는 제거하고 오래된 객체는 Old 영역에 보낸다고 정도만알고 있었다. 정확히는 GC 알고리즘마다 좀 다르게 동작하기에, 요..
[JAVA] 제네릭 공변, 반공변
·
java
그동안 얕게 알고 쓰던 자바를 정리하기 위한 포스팅 / 개인 기록용 자바, 코틀린에는 제네릭이라는 개념이 있다. 제네릭은 타입을 파라미터로 전달할 수 있도록 하기 위해 만들어진 것이다.흔히 List, Map과 같은 Collections를 사용하기 때문에 자연스럽게 사용해왔을 것이다. 단순히 제네릭을 사용하는 건 어렵지 않다. 다만 제네릭과 관련된 학습 문서를 보면 와일드카드와 관련해서 공변, 반공변이란 개념을접할 수 있는데 이 개념들이 그렇게 쉽게 잘 와닿지 않기 때문에 다시 정리한다.제네릭은 불공변이다.공변이란 것은 타입 계층이 그대로 유지되는 것이라고 생각하면 된다.예를 들어 Animal(부모) -> Cat(자식) 관계라고 하자. 그럼 Animal과 Cat이 사용되는 어떠한 클래스도 똑같이 성립된다면..
[JAVA] Reflection - 리플렉션
·
java
그동안 얕게 알고 쓰던 자바를 정리하기 위한 포스팅 / 개인 기록용 자바에서는 리플렉션이란 개념이 있다.리플렉션은 간단하게 런타임 시점에 클래스에 대한 정보 혹은 구조를 조회하고 수정하는 것이라고 표현할 수 있다.어떻게 그리고 왜 사용되는지 알아보자리플렉션 용도?일반적으로 비즈니스 로직을 작성하는 경우에는 리플렉션을 사용할 일이 별로 없다.적어도 비즈니스 로직을 작성할 때에는 의도를 가지고 사용할 객체를 인식하는 상태에서 코드를 작성하기 때문이다.그래서 주로 리플렉션은 프레임워크, 라이브러리에서 사용된다. 프레임워크, 라이브러리는 자신의 기능을 외부에서 쓰이길 바란다.근데 외부에서 자신들의 기능을 사용할 때 어떤 객체들이 전달될 지 모른다. 따라서 런타임 시점에 클래스에 대한 정보 혹은 구조를 조회해야할..