본문 바로가기

반응형

분류 전체보기

(142)
[Scala] What is functional programming? 예제 소스 https://github.com/fpinscala/fpinscala FE 란? - functional programming, - 전제: 순수 함수 (pure function) 즉, 부수 효과 (side effect) 가 없는 함수들로만 구축. 부수 효과(side effect) 란? - 그냥 결과를 돌려주는 것 이외의 어떤 일을 말한다. 부수 효과 (side effect) 의 몇 가지 예 변수를 수정한다. 자료구조를 제자리에서 수정한다. 객체의 필드를 설정한다. 예외(exception)를 던지거나 오류를 내면서 실행을 중단한다. 콘솔에 출력하거나 사용자의 입력을 읽어들인다. 파일에 기록하거나 파일에서 읽어들인다. 화면에 그린다. 위와 같은 일들을 전혀 수행할 수 없거나 수행할 수 있는 때와 장..
Spring Task 스프링 프레임워크는 TaskExecutor 인터페이스와 TaskScheduler 인터페이스로 태스크의 비동기 시행과 스케줄링에 대한 추상화를 제공 요구사항 메일 8시에 특정 테이블에 하루동안 쌓인 데이타에 대한 처리. Spring에서 제공하는 Sehcedul 기능은 Spring Batch만큼 순차작업이나 실패에 따른 복구등의 많은 기능을 가지고 있지 않지만, 간략한 설정과 어노테이션만으로 편리하게 설정이 가능한 장점을 가지고 있다. 최소한의 코드를 가진다는건 한눈에 파악할 수 있고, 빠르게 수정이 가능하다는 뜻이다. 1) XML 설정 2) task 생성 @scheduled annotation으로 Scheduler를 통한 Job을 실행하도록 설정 @Component @TaskClientLogs public..
make DI Framework by reflection 나만의 DI 프레임워크 만들기 @Inject 라는 애노테이션 만들어서 필드 주입 해주는 컨테이너 서비스 만들기 @Retention(RetentionPolicy.RUNTIME) public @interface Inject { } BookService.java public class BookService { @Inject public Object bookRepository; } ContainerService.java public class ContainerService { public static T getObject (Class classType) { T instance = createInstance(classType); Arrays.stream( classType.getDeclaredFields() )...
Reflection https://asfirstalways.tistory.com/221 스프링의 Depedency Injection은 어떻게 동작할까? BookService.java @Service public class BookService { @Autowired BookRepository bookRepository; } bookRepository 인스턴스는 어떻게 null이 아닌걸까? 스프링은 어떻게 BookService 인스턴스에 BookRepository 인스턴스를 넣어준 것일까? 리플렉션 API 1 클래스 정보 조회 리플렉션의 시작은 Class https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html Class에 접근하는 방법 모든 클래스를 로딩 한 다음 Cl..
byte code 조작 아무것도 없는 Box에서 “Icecream”을 꺼내기 바이트코드 조작 라이브러리 ASM: https://asm.ow2.io/ 어려움.. Javassist: https://www.javassist.org/ 조금 덜 어려움.. ByteBuddy: https://bytebuddy.net/#/ ByteBuddy maven dependency 추가 net.bytebuddy byte-buddy 1.10.1 Box.java public class Box { public String pullOut() { return ""; } } App.java public class App { public static void main( String[] args ) { //try { //new ByteBuddy() //.redefi..
Byte Code 바이트코드 class 파일(바이트 코드) 읽기 명령어 javap -c X xxx.class 바이트코드 조작 코드 커버리지는 어떻게 측정할까? 코드 커버리지? 테스트 코드가 확인한 소스 코드를 % JaCoCo를 써보자. https://www.eclemma.org/jacoco/trunk/doc/index.html http://www.semdesigns.com/Company/Publications/TestCoverage.pdf pom.xml에 플러그인 추가 org.jacoco jacoco-maven-plugin 0.8.4 prepare-agent report prepare-package report 메이븐 빌드 mvn clean verify Green – Code is tested or covered. Red..
Class Loader 클래스 로더 계층형 ( 부모, 부모의 부모가 있음 ) 동작 원리 : 제일 부모에게 읽어오도록, 못 읽으면, 그 다음 부모, 그 다음 부모, ... 본인이 읽어 오도록! 만약, 본인도 못 읽으면 ClassNotFoundExeption 발생.. org.springframework.boot.devtools.restart.classloader.RestartClassLoader@3c5c4354 sun.misc.Launcher$AppClassLoader@764c12b6 sun.misc.Launcher$ExtClassLoader@4462e14c null // native code로 구현되어 있는 class loader...(부트스트랩 클래스로더) 로딩, 링크, 초기화 순으로 진행된다. 로딩 클래스 로더가 .class..
JVM JVM 구조 클래스 로더 시스템 .class 에서 바이트코드를 읽고 메모리에 저장 로딩: 클래스파일에서 바이트 코드를 읽어오는 과정 링크: 레퍼런스를 연결하는 과정 초기화: static 값들 초기화 및 변수에 할당 메모리 메모스 영역에는 클래스 수준의 정보 (패키지 정보, 클래스 이름, 부모 클래스 이름, 메소드, 변수) 저장. 공유 자원이다. 힙 영역에는 객체를 저장. 공유 자원이다. PC(Program Counter) 레지스터: 쓰레드 마다 쓰레드 내 현재 실행할 스택 프레임을 가리키는 포인터가 생성된다. 네이티브 메소드 스택 https://javapapers.com/core-java/java-jvm-run-time-data-areas/#Program_Counter_PC_Register JVM Sta..

반응형