JAVA 6

[Java] Relection 메소드 필드명 가져오기 arg0, arg1

메소드 필드명이 필요했던 이유AOP를 이용해 다양한 곳에서 유연하고 범용성 있게 사용하기 위해 메소드의 매개변수 필드명이 필요했습니다.Reflection 메소드 매개변수 필드명 가져오기해당 log에서 원하는 출력 값은 lockName과 userId의 값이였습니다.Parameter.getName()하지만 예상했던 것과는 다르게 arg0, arg1 과 같은 변수명을 가져왔습니다.그래서 저는 왜 이런 값을 가져오는지 내부 메소드를 확인해봤습니다클래스 구조도Method클래스는 Executable 클래스를 상속하고 있고 getParameters는 Executable클래스에서 구현되어 있었습니다ExecutablegetParameters 메소드(시작)privateGetParameters 메소드tmp가 초기화 되는 로..

JAVA 2024.04.28

[Java] TreeSet의 구조와 주의사항

TreeSet 구조 TreeSet은 필드로 NavigableMap인터페이스를 필드로 가지고 있으며 TreeMap클래스가 필드인NavigableMap 인터페이스를 구현하는 구조를 가지고 있습니다. TreeSet 생성자가 호출되면 m 필드에 TreeMap클래스가 할당되게 됩니다. 저는 이 TreeSet을 사용하면서 예상한 결과값이랑 다르게 결과가 나와서 어떤 이유인지 찾아보기로 했습니다. 문제점 결과 x만 비교하여 TreeSet 자료구조를 사용했을 때는 1개의 요소밖에 존재하지 않았습니다. HashSet이라면 객체의 hashCode()와 equals()를 비교하여 객체의 수가 2라는 결과가 나왔을텐데 말이죠... 결과 x와 y 모두 비교하는 코드를 작성했습니다. 이번에는 원하는 결과가 나왔습니다. 왜 이런 ..

JAVA 2024.02.29

[Java] 동적 프록시에 대해

프록시는 기존 코드에 영향을 주지 않으면서 타깃의 기능을 확장하거나 접근 방법을 제어할 수 있는 유용한 방법입니다. 하지만 데코레이터 패턴을 활용해서 부가적인 기능을 하는 코드를 클래스마다 매번 정의해야하고 클래스도 매번 넣어야 했습니다. 여기서 오는 코드의 중복과 다수의 클래스가 생겨났습니다. 이러한 문제점들을 해결해주는게 바로 동적 프록시입니다. 자바에서는 동적프록시를 어떻게 사용하는지 알아보겠습니다. 자바에서 동적프록시를 사용하기 위한 클래스 Proxy InvocationHandler 서비스로직 인터페이스 서비스로직 구현체 부가기능 구현체(InvocationHandler를 구현한) 위 그림에서 보면 Proxy클래스를 기반으로 동적 프록시가 생성되고 필드에 클래스 로더와 서비스로직 인터페이스 부가기능..

JAVA 2023.11.28

[JAVA] GC란?

GC란? 프로그램이 동적으로 할당했던(heap 영역) 메모리 영역 중 필요 없게 된 영역을 여러 알고리즘을 통해 해제하는 것입니다. 장점 - 메모리 누수 방지 - 해제된 메모리에 접근 방지 - 해제한 메모리 또 해제 방지 단점 - GC 작업은 순수 오버헤드 - 개발자는 언제 GC가 메모리를 해제하는지 모릅니다. Reference Counting 객체의 접근할 수 있는 카운팅 넘버를 통해 현재 참조중인지 확인하는 알고리즘 문제점 : 힙 객체가 서로 참조하고 있으면 순환참조로 GC제거 대상에서 제외된다 Mark And Sweap root로 부터 연결되어 있다면 rechable 연결되어 있지 않다면 unreachable 단점 의도적으로 GC를 실행시켜야 한다. 어플리케이션 실행과 GC 실행이 병행됩니다. Ro..

JAVA 2023.11.09