프로그래밍언어/Java(중급)
-
프록시 패턴프로그래밍언어/Java(중급) 2020. 4. 24. 21:25
안녕하세요 현우입니다. 이번 포스팅은 [ 프록시 패턴에대한 이해 ] 입니다. 자바 학습에 도움을 주신 백기선 개발자님께 항상 감사드립니다 :) https://www.inflearn.com/course/the-java-code-manipulation/lecture/23430 더 자바, 코드를 조작하는 다양한 방법 - 인프런 여러분이 사용하고 있는 많은 자바 라이브러리와 프레임워크가 www.inflearn.com 1. 프록시 패턴 프록시란 ? 사전적의미 : 대리, 대리인이라는 듯 프로그래밍에서 프록시는? 위 그림과 같이 프록시와 리얼프로젝트는 동일한 하나의 인터페스를 공유하고 있다. 그리고 프록시는 리얼프로젝트를 참조하고 있다. 즉 프록시와 리얼 서브젝트는 똑같은 인터페이스로 구현되어있는 것이다. 그런데 클..
-
6. Spring에서 바이트 코드 조작 활용 예프로그래밍언어/Java(중급) 2020. 3. 26. 19:36
ComponentScan 어노테이션 프로그램분석 해당위치 부터 모든 패키지를 탐색하면서(하위포함) 모든 어노테이션을 찾아서 bin으로 등록한다 (@Service, @Repository, @Configuration...) class 설명 - ASM사용 This implementation is based on Spring's - {@link org.springframework.core.type.classreading.MetadataReader MetadataReader} - facility, backed by an ASM {@link org.springframework.asm.ClassReader ClassReader}. - @author Mark Fisher - @author Juergen Hoeller ..
-
5. 바이트코드 조작마술프로그래밍언어/Java(중급) 2020. 3. 26. 17:48
Moja.java public class Moja { public String pullOut() { return ""; } } Masulsa.java public class Masulsa { public static void main(String[] args) { System.out.println(new Moja().pullOut()); } } 아무것도없는 moja클래스를 호출하여 "Rabbit"을 콘솔에 찍히게 한다. public class Masulsa{ public static void main(String[] args){ try{ new ByteBuddy().redefine(Moaj.class) //모자클래스 재정의 .method(named("pullOut")).intercept(FixedValu..
-
4. 바이트코드 조작프로그래밍언어/Java(중급) 2020. 3. 26. 17:13
코드 커버리지는 어떻게 측정할까? 코드 커버리지? 테스트 코드가 확인한 소스 코드를 얼마만큼을 Test했는지 확인한다. JaCoCo를 써보자. https://www.eclemma.org/jacoco/trunk/doc/index.html http://www.semdesigns.com/Company/Publications/TestCoverage.pdf JaCoCo - Documentation Documentation Concepts See what this is all about and understand the basic ideas. Using JaCoCo Use JaCoCo tools out-of-the-box. Integrating JaCoCo Integrate JaCoCo technology with..
-
3. 클래스 로더프로그래밍언어/Java(중급) 2020. 3. 26. 15:45
클래스 로더 로딩, 링크, 초기화 순으로 진행된다. 로딩 클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 “메소드” 영역에 저장. 이때 메소드 영역에 저장하는 데이터 FQCN (Fully Qualified Class Name) 클래스 | 인터페이스 | 이늄 메소드와 변수 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 “힙" 영역에 저장. 링크 Verify, Prepare, Reolve(optional) 세 단계로 나눠져 있다. 검증: .class 파일 형식이 유효한지 체크한다. Preparation: 클래스 변수(static 변수)와 기본값에 필요한 메모리를 준비하는 과정 Resolve: 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교..
-
2. JVM 구조프로그래밍언어/Java(중급) 2020. 3. 26. 15:16
1. 클래스 로더 시스템 .class 에서 바이트코드를 읽고 메모리에 저장한다. 로딩: 클래스 읽어오는 과정 링크: 레퍼런스를 연결하는 과정 초기화: static 값들 초기화 및 변수에 할당 2. 메모리 메소드 : 클래스 수준의 정보 (pull package 이름, 클래스 이름, 부모 클래스 이름, 메소드, 변수) 저장. 공유 자원이다. 힙 : 객체를 저장. 공유 자원이다. (실제 인스턴스들을 저장) 스택 : 쓰레드 마다 런타임 스택을 만들고, 그 안에 메소드 호출을 스택 프레임이라 부르는 블럭으로 쌓는다. 쓰레드 종료하면 런타임 스택도 사라진다. (해당 쓰레드 내에 국한된다) PC(Program Counter) 레지스터 : 쓰레드 마다 쓰레드 내 현재 실행할 스택 프레임을 가리키는 포인터가 생성된다. ..
-
1. JDK, JVM, JRE 이해하기프로그래밍언어/Java(중급) 2020. 3. 26. 14:45
안녕하세요 현우입니다. 이번 포스팅은 [ JVM, JRE, JDK에 대한 이해와 활용 ] 입니다. 자바 학습에 도움을 주신 백기선 개발자님에게 감사드립니다 :) https://www.inflearn.com/course/the-java-code-manipulation 더 자바, 코드를 조작하는 다양한 방법 - 인프런 여러분이 사용하고 있는 많은 자바 라이브러리와 프레임워크가 www.inflearn.com JVM (Java Virtual Machine) 특징 자바 가상 머신으로 자바 바이트 코드(.class 파일)를 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행한다. 바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체(특정 밴더가 구현한 JVM)다. JVM 스팩: https://..