Java(4)
-
불변객체 VS 가변객체
오늘은 가변객체와 불변객체에 대해 공부해볼 것이다. 우선 가변객체에 대해 알아보자 - 가변객체 : 객체가 생성된 후에도 내부를 언제든지 변경할 수 있는 객체가변객체는 아래와 같은 특징을 갖는다.1. 언제든지 내부 상태 변경이 가능하다. 즉 동적으로 수정 할 수 있다는 뜻이다.2. 상태가 언제든지 바뀔 수 있기 때문에 멀티스레드 환경에서 수정할시 동기화 문제가 발생할 수 있다. 대표적인 가변객체 예시로는 ArrayList, HashMap등이 있다. 이제 가변객체의 예시를 만들어보자public class MutableEx { int n; public void setN(int n) { this.n = n; } public int getN() { return n; ..
2024.06.15 -
자바 GC(Garbage Collection)
이번엔 지난글에서 공부하겠다한 GC를 공부해볼것이다.GC는 지난글에서 아주 간단히 설명했지만 힙영역에 존재하는 인스턴스가 더 이상 참조되지 않을때 메모리에서 청소된다 했는데 작동원리가 된다.그러면 GC는 우리가 어떻게 작동하는지 알 필요 없을정도로 만능일까? 아쉽게도 그건 아니었다.메모리가 언제 해재되는지 정확히 알 수 없고 GC가 동작하는 동안에는 다른 동작이 멈추기 때문에 오버헤드가 발생한다.(오버헤드는 GC 작업이 애플리케이션 실행에 미치는 부가적인 비용을 의미한다.) 이렇게 동작이 멈추는 현상을 STW(Stop The World)라고 한다.최적화를 통해 이 STW 시간을 줄이는게 중요하다. 그러한 최적화 작업을 GC 튜닝이라 한다.우선 튜닝은 튜닝인데 튜닝을 할라면 어떻게 작동하는지를 알아야 한..
2024.06.13 -
자바 메모리 구조
오늘은 자바 메모리 구조에 대해 공부해 볼 것이다.우선은 자바의 메모리 구조를 알기 위해 아래 사진을 참고해 보자 자바의 장점은 플랫폼에 독립적이라는 점이다. 플랫폼에 독립적일 수 있는 이유는 윈도에서 자바 프로그램을 실행하던 리눅스나 맥에서 프로그램을 실행하던지 javac라는 컴파일러가 .java 파일을 .class라는 바이트 코드로 번역시킨 후 JVM에서 실행하기 때문에 어떤 운영체제라도 바이트 코드가 동일하게 실행될 수 있다. 컴파일된 파일을 실행하기 위해 JVM이 운영체제를 통해 메모리를 할당받는데 위의 그림이 JVM의 구조이다. JVM 구조의 해당하는 부분을 간략하게 알아보고 Runtime Data Areas에 대해 알아볼 것이다.그전에 구글링 해보니 그림과 다르게 GC는 Execution En..
2024.06.09 -
싱글톤 패턴 (Singleton Pattern)
오늘은 싱글톤 패턴에 대해 공부해 볼 것이다.싱글톤 패턴은 디자인 패턴의 종류 중 하나로 객체의 인스턴스가 오직 1개만 생성되는 패턴이다. 우선 싱글톤패턴이 속한 디자인 패턴에 대해 짧게 알아보자 디자인 패턴은 소프트웨어 설계에서 자주 발생하는 문제를 해결하기 위해 재사용 가능하도록 정리해 놓은 해결책이다.디자인 패턴은 크게 세 종류로 분류되는데 생성 패턴(Creational Pattern), 행동 패턴(Behavioral Pattern), 구조 패턴(Structural Pattern)이 있다. - 생성 패턴 (Creational Pattern)객체 생성에 대한 메커니즘을 다루고 객체 생성의 복잡성을 줄이며, 객체 생성 과정을 캡슐화하는 방법을 다루는 패턴이다.오늘 공부할 싱글톤 패턴도 이 패턴에 속한다..
2024.06.07