일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- AOP
- junit5
- Spring Data Redis
- IOC
- JSON
- 서명
- mockito
- di
- bytecode
- Exception
- spring
- reflection
- bounded context
- PSA
- OOP
- Java
- redis
- Transaction
- jvm
- rest api
- MSA
- ddd
- Rest
- JWT
- Generic
- SOA
- *
- Today
- Total
목록Java (6)
개발자일기
1. Generics 자바 5에서 추가된 기능으로서 제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다 static 메소드 제네릭 public static class Utils{ public static int size(T[] anArray) { return anArray.length; } } 클래스 제네릭 class MyClass { T t; private MyClass(T t){ this.t = t; } T getT(){ return t; } } 2. type eraser 자바는 컴파일시에 제네릭 타입 정보들을 제거 한다. 런타임시에는 실제로 타입정보는 존재 하지 않고 강제 캐스팅 된다. class MyClass { Object t; private MyCl..
개발을 하다보면 귀차니즘으로 인해 RuntimeException으로 throw한다. 검사 예외와 런타임 예외를 어떻게 구분 해야될까 검사(체크) 에러 호출하는 쪽에서 복구 하리라 여기지는 상황이면 검사(체크) 예외를 사용해라 API설계자가 검사 예외를 던져주어 핸들링 하라는 의미 ex) DB 트랜잭션 실패의 경우에는 롤백이 필요하니 검사 에러가 적합 API를 제대로 사용해도 발생할수 있는 오류, 프로그래머가 조치를 취할수잇는 오류 일반적으로 복구 가능한 정보도 전달 Exception에 메소드 제공 FailType failType; public OrderCancelFailException(FailType failType){ this.FailType = failType; } FailType getType()..
스프링의 핵심 : POJO 스프링의 목적은 무엇일까? 자바 엔터프라이즈 어플리케이션을 쉽게 개발할수 있도록 한것이다. 그 목적을 위해서 POJO가 핵심이 되는 것이다. POJO란 plain old java object의 약자 간단한 자바 오프젝트를 의미하는데, JAVA EE의 무겁고 복잡한 프레임워크를 대항하기 위한 용어이다. POJO 프로그래밍? 특정 기술이나 환경에 의존적이지 않는 Object 다른 기술, 환경에서도 동작할수 있도록 확장성 지원 표준 스펙을 가진 인터페이스 하이버네이트를 사용하기 위해서 직접 하이버네이트에 의존하지 않고, 스프링의 JPA같은 표준인터페이스를 가진 POJO프레임워크를 제공 POJO는 추상화가 잘되어있기 때문에 테스트가 쉽고, 객체지향인 설계를 제공해 확장성을 높여주고, ..
단위(Unit) 테스트 JUnit이란? 자바 단위테스트 프레임워크 xUnit이란 ? 자바만 단위 테스트 프레임워크 있는게 아니라, 다른언어도 단위테스트를 위한 프레임워크가 존재 이를 통칭해서 Xunit이라한다. CUnit(c), PHPUnit(PHP) 등등 그럼 단위 테스트란?? 단위를 바라보는 두가지 시각 객체지향에서는 하나의 클래스를 단위로 본다.(개인적 선호) 기능 자체를 단위로 본다. 예를들어 컨트롤러 서버스 까지 하나의 단위로 묶는다. 해당 단위가 정상적으로 동작하는지 검증이다. JUnit5 링크 : https://junit.org/junit5/docs/current/user-guide 3개의 컴포넌트(모듈로 구성) Junit Platform : 테스트의 런처, TestEngine의 인터페이스 ..
ByteCode 조작 compile결과인 bytecode를 조작 classLoader가 클래스를 읽어올때 javaagent의 premain에서 조작시도 이미 런타임에 조작시 클래스가 메모리에 로드된 상태임 ByteBuddy 라이브러리 사용 APM툴 같은것들이 조작을이용한다. Reflection 클래스로더에 의해 메모리에 로딩된 class정보 조회 필드, 메소드 , 상위 클래스, 상위 인터페이스를 가져옴, 어노테이션 annotion을 @Retetion을 runtime까지 유지시키면 annotion정보를 가져올수있다. Class를 이용한 객체생성 Constructor.newInstance(), Constructor.newInstance(params) 적합한 생성자 존재 필요 필드에 접근 private에도 접..
JRE 자바를 실행하기 위한 도구 JDK JRE + 자바개발도구(컴파일러 등등) 메모리구조 heap 객체를 저장 메소드 영역 클래스 정보, static 변수 PC(Program Counter) 레지스터 실행되야될 명령어 위치를 가지고있다. 쓰레드마다 생성 스택 쓰레드마다 스택 생성, 메소드 호출 스택 네이티브 메소드 스택 네이티브를 실행하기 위한 스택 자바 실행 순서 COMPILE bytecode로 컴파일 클래스 로더 필요한 class들을 동적으로 메모리에 올림, class path에 있는것들은 다올린다. 힙에는 Class객체 생성 메소드 영역에는 클래스 정보를 class로더 계층형 체이닝, 위에서 찾고 없으면 밑으로 위임 부트스트랩 : java_home/lib 자바 코어 라이브러리 플랫폼(익스텐션) 클..