본문 바로가기

분류 전체보기177

2024.09.04(수) { 네임스페이스, 자바빈의 기본속성 } 네임스페이스(namespace) 네임스페이스(namespace)는 프로그래밍에서 이름 충돌을 방지하기 위해 사용되는 개념입니다. 동일한 이름의 변수, 함수, 클래스 등이 다른 영역에서 충돌 없이 사용될 수 있도록 논리적인 구획을 만들어줍니다.Java에서는 네임스페이스를 패키지(package)라는 개념으로 구현합니다. 패키지를 통해 클래스가 포함된 파일 구조를 명시하고, 동일한 이름의 클래스를 서로 다른 패키지 내에서 사용할 수 있습니다. 예를 들어, 두 개의 서로 다른 패키지에서 동일한 클래스 이름을 사용할 수 있습니다:// 첫 번째 패키지package com.example.package1;public class MyClass { public void display() { System... 2024. 9. 4.
Java Instrument API vs ASM(Abstract Syntax Manipulation) Java Instrumentation API와 ASM은 모두 Java 바이트코드 조작을 가능하게 하는 도구이지만, 그 목적과 사용 방식이 다릅니다. 이 둘은 서로 보완적으로 사용될 수 있으며, Instrumentation API는 ASM과 같은 라이브러리와 함께 사용되어 바이트코드를 런타임에 조작할 수 있습니다.Java Instrumentation API주요 목적: Instrumentation API는 Java 애플리케이션에서 런타임 시 클래스의 바이트코드를 조작할 수 있는 기능을 제공합니다. 주로 Java Agent를 통해 사용되며, JVM에서 클래스가 로드되기 전이나 이미 로드된 후에 바이트코드를 수정할 수 있습니다.역할:Instrumentation API는 클래스 로딩 과정에 개입할 수 있는 메커니.. 2024. 9. 3.
2024.09.03(화) { 원자성, 바인딩, 모듈, perthis, 자바 에이전트 } 원자성(Atomicity) Java에서 원자성(Atomicity)은 멀티스레딩 환경에서 여러 스레드가 동시에 공유 자원에 접근할 때 데이터 일관성을 보장하는 중요한 개념입니다. 원자성 있는 연산은 분할될 수 없는 작업으로, 다른 스레드가 그 연산이 완료되기 전까지 중간 상태를 볼 수 없도록 보장합니다. Atomic 클래스 Java에서는 java.util.concurrent.atomic 패키지에서 원자성 있는 연산을 지원하는 다양한 클래스를 제공합니다. 이 클래스들은 내부적으로 CAS(Compare-And-Swap) 같은 저수준 동기화 기법을 사용하여, 안전한 멀티스레딩을 지원합니다.주요 Atomic 클래스:AtomicInteger: 원자적 int 연산을 제공합니다.AtomicLong: 원자적 long 연.. 2024. 9. 3.
2024.09.02(월) { 인라인 포인트컷, args(제한&가져오기), 인라인(Inlining) 포인트컷 인라인 포인트컷은 포인트컷 표현식을 직접 어드바이스 정의에 포함하는 방식입니다. 인라인으로 정의하면, 별도의 포인트컷 메서드를 만들지 않고 어드바이스와 함께 포인트컷을 정의할 수 있습니다.import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;@Aspectpublic class LoggingAspect { // 인라인 포인트컷을 사용한 Before 어드바이스 @Before("execution(* com.example.service.*.*(..))") public void logBeforeMethod() { System.out.println("Meth.. 2024. 9. 2.
2024.08.30(금) { PCD-this와target차이, proceed() } this와 target은 AspectJ에서 사용되는 PCD(Pointcut Designator)로, 둘 다 특정 객체와 관련된 조인 포인트를 지정하지만, 이 둘은 중요한 차이가 있습니다. 두 가지를 혼용하지 않도록 주의해야 합니다.1. this PCD정의: this PCD는 현재 실행 중인 객체가 특정 타입을 구현하는지를 검사합니다. 이때 this는 프록시(proxy) 객체를 대상으로 합니다. 주로 스프링 AOP와 같은 프록시 기반 AOP 프레임워크에서 사용됩니다.사용 예시:pointcut myPointcut() : this(com.example.MyInterface);위 예시는 조인 포인트가 현재 com.example.MyInterface 타입의 객체에서 실행되고 있는지를 확인합니다.즉, 프록시 객체가.. 2024. 8. 30.
2024.08.29(목) { 위임 한다는것, AspectJ의 아규먼트&파라미터, PCD, 디지그네이터 } 위임을 한다는 것 =  타겟클래스객체를 사용한다는 것 위임(delegation)은 객체지향 프로그래밍에서 자주 사용되는 설계 기법으로, 특정 작업이나 책임을 다른 객체(일반적으로 "타겟 클래스" 객체)에 위임하는 것을 의미합니다. 위임을 사용하면 클래스의 책임을 분산시켜 코드의 재사용성을 높이고, 결합도를 낮출 수 있습니다. 위임의 개념위임(Delegation): 한 객체가 자신의 작업 중 일부를 다른 객체(타겟 클래스)에게 위임하는 것입니다. 즉, 클라이언트 요청을 직접 처리하지 않고, 요청을 타겟 클래스의 객체에게 전달하여 해당 작업을 수행하도록 합니다.타겟 클래스: 위임을 받은 객체입니다. 위임을 수행하는 클래스는 이 타겟 클래스의 객체를 사용하여 실제 작업을 수행합니다.위임의 예시아래는 간단한 위.. 2024. 8. 29.