본문 바로가기
728x90

JAVA4

[JAVA] 리플렉션 (Reflection) 리플렉션 (Reflection) 이란? 리플렉션은 구체적인 클래스 타입을 알지 못하더라도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있는 자바 API 를 말한다. 자바의 리플렉션은 클래스, 인터페이스, 메소드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경하거나 메소드를 호출할 수 있다. 리플렉션은 언제 사용할까? 동적으로 클래스를 사용해야 하는 경우 코드를 작성할 시점에는 어떤 타입의 클래스를 사용할지 모르지만, 런타임 시점에 지금 실행되고 있는 클래스를 가져와서 실행해야 하는 경우 프레임워크나 IDE 에서 이런 동적 바인딩을 이용한 기능을 제공한다. IntelliJ 의 자동완성 기능, 스프링의 어노테이션이 리플렉션을 이용한 기응이다. 리플렉션을 사용하여 가져올 수 있는 정보는 다음과 같다. .. 2023. 12. 22.
[OOP] 객체지향 설계의 5가지 원칙 (SOLID) Design Principles and Design Patterns 모든 개발이 그렇듯 프로젝트 초반에는 완벽하게 설계가 된 것 같고 견고하게 구조를 다듬어 나아가는듯해 보이지만, 개발을 하면 할수록 나의 코드와 구조의 틀이 점점 어긋나기 시작한다. 결국 어쩔 수 없이 리팩토링을 하게 되는데 그럴 때마다 항상 떠오르는 기본중의 기본 원칙, 바로 이번에 소개하는 개발지향 설계의 5가지 원칙을 항상 떠올리게 된다. SOLID 설계 원칙은 OOP 의 4가지 특징(추상화, 상속, 다형성, 캡슐화)와 더불어, 객체 지향 프로그래밍의 단골 면접 질문 중 하나이다. 또한 앞으로 배우게 될 여러 디자인 패턴(Design Pattern) 들이 SOLID 설계 원칙에 입각해서 만들어진 것이기 때문에, 표준화 작업에서부터 .. 2023. 12. 22.
[JAVA] Garbage Collection(가비지 컬렉션) 알고리즘 종류 JVM 이 메모리를 자동으로 관리해주는 것은 개발자의 입장에서 상당한 메리트이다. 하지만 문제는 GC 를 수행하기 위해 Stop The World 가 발생되고, 이 때문에 애플리케이션이 중지된느 문제점이 발생하게 되었다. 또한 자바가 발전됨에 따라 Heap의 사이즈가 커지면서 애플리케이션의 지연(Suspend) 현상이 두드러지게 되었고, 이를 최적화하기 위해 다양한 Garbae Collection(가비지 컬렉션) 알고리즘이 개발되었다. Serial GC 서버의 CPU 코어가 1개일 때 사용하기 위해 개발된 가장 단순한 GC GC 를 처리하는 쓰레드가 1개(싱글 쓰레드)여 이기 때문에 stop-the-world 시간이 가장 길다. Minor GC 에는 Mark-Sweep 을 사용하고, Major GC 에는.. 2023. 12. 22.
[JAVA] JVM 내부 구조 & 메모리 영역 JVM 이란? JVM 은 Java Virtual Machine 의 약자로, 자바 가상 머신이라고 부른다. 자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애받지 않고 프로그램을 실행할 수 있도록 도와준다. 또한, 가비지 컬렉터를 사용하여 메모리 관리도 자동으로 수행하며, 다른 하드웨어와 다르게 레지스터 기반이 아닌 스택 기반으로 동작한다. JVM 의 동작 방식 1. JAVA 프로그램을 실행하면 JVM 은 OS 로부터 메모리를 할당받는다. 2. 자바 컴파일러(javac) 가 자바 소스코드(.java)를 자바 바이트 코드(.class)로 컴파일한다. 3. Class Loader는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 Runtime Data Area(실질적인 메모리를 할당.. 2023. 12. 21.
728x90
반응형