본문 바로가기

Computer Sience66

[JAVA] 다이나믹 프록시 스프링 데이터 JPA는 어떻게 동작할까?@Entity@Setterpublic class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @Column(name = "TITLE") private String title;}public interface BookRepository extends JpaRepository {}스프링 데이터 JPA에서는 JpaRepository를 상속받기만 하면 별도의 구현체를 제공하지 않아도 자동으로 필요한 메서드들이 동작한다. 이는 스프링의 DI(의존성 주입)와 프록시 패턴을 사용하여 구현된 구조 덕분이다.  프록시 생성스프링 데이터 JPA는 @EnableJpaRepositor.. 2024. 10. 16.
[JAVA] Reflection 스프링의 Depedency Injection은 어떻게 동작할까?@Repositorypublic class BookRepository {}@Servicepublic class BookService { public final BookRepository bookRepository; public BookService(BookRepository bookRepository) { this.bookRepository = bookRepository; }}@SpringBootTestclass BookServiceTest { @Autowired BookService bookService; @Test public void diTest(){ assertThat(bo.. 2024. 10. 10.
[JAVA] 바이트 코드 조작 코드 커버리지는 어떻게 측정할까? JaCoCo(Java Code Coverage) Java 애플리케이션에서 테스트 커버리지를 측정하는 오픈 소스 라이브러리이다. 주로 단위 테스트, 통합 테스트 등을 실행할 때 각 코드가 얼마나 실행되었는지(커버리지)를 확인하기 위해 사용된다.JaCoCo는 Maven, Gradle 같은 빌드 도구와 쉽게 통합할 수 있어, 테스트를 실행할 때 자동으로 코드 커버리지 리포트를 생성한다. 이 리포트는 HTML, XML, CSV 등의 다양한 포맷으로 제공되며, 이를 통해 코드가 충분히 테스트되고 있는지 파악하고, 테스트를 추가해야 할 부분을 쉽게 찾을 수 있다.JaCoCo 문서 https://www.eclemma.org/jacoco/trunk/doc/index.html간단하게 테.. 2024. 10. 10.
[JAVA] JVM 전체 구조 정리 해당 그림은 자바 7 이하 버전의 전체 구조이다. 자바 7 이하 버전의 메소드 영역 PermGen(Permanent Generation) ↔ 메소드 영역(Method Area) 자바 7 이하 버전에서는 메소드 영역에 해당하는 메모리 공간이 PermGen 영역에 있었다.클래스 메타데이터(클래스 이름, 메소드, 상수 풀, 클래스 변수 등)를 저장하는 영역  PermGen에 저장되는 정보들// 클래스 이름 / 부모 클래스 (Object) -> 저장 Opublic class Example { // 클래스 변수 (Static Field) -> 저장 O public static String CLASS_NAME = "ExampleClass"; // 인스턴스 변수 -> 저장 X priva.. 2024. 10. 8.
[JAVA] 자바, JVM, JDK, JRE JVM (Java Virtual Machine) 자바 가상 머신으로 자바 바이트 코드 (.class 파일)를 OS에 특화된 코드로 변환(인터프리터 JIT 컴파일러)하여 실행한다.바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체(특정 밴더가 구현한 JVM)이다. JVM 밴더: 오라클, 아마존, Azul, ...JVM 스팩: https://docs.oracle.com/javase/specs/jvms/se11/html/특정 플랫폼에 종속적이다.자바 컴파일 과정자바 소스 코드 (.java 파일)자바로 작성한 코드를 컴파일러(Javac)를 사용하여 바이트 코드로 변환바이트 코드 (.class 파일).java에서 바이트 코드로 변환하여 생성된 파일은 OS에 독립적인 바이트 코드 형식을 가지고 있다. 즉,.. 2024. 10. 8.
[JAVA8] 애노테이션의 변화 목차 자바 8부터 애노테이션을 타입 선언부에도 사용할 수 있다.자바 8부터 애노테이션 중복 사용이 가능하다 자바 8부터 애노테이션을 타입 선언부에도 사용할 수 있다. 타입 선언부: 타입 파라미터 / 타입   타입 파라미터와 타입의 차이  타입 파라미터: 제네릭 클래스나 메소드에서 동적으로 타입을 지정하기 위해 사용하는 매개변수이다.컴파일 시점에 구체적인 타입으로 대체된다.타입: 구체적인 데이터 타입이다. 예를 들어, String, Integer, List 등은 타입이다. 이는 타입 파라미터가 대체되는 구체적인 타입이 된다. 타입 파라미터에 적용  → ElementType.TYPE_PARAMETER@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE_.. 2024. 10. 7.