각각에 대해 이해하고, 차이점을 안다.자바 바이트 코드(.class 파일)를 OS에 특화된 코드로 변환(인터프리터와 JIT컴파일러를 통해)하여 실행(특정 플랫폼에 종속적)JVM 스팩: https://docs.oracle.com/javase/specs/jvms/
.class 에서 바이트 코드를 읽고 메모리에 저장로딩: 클래스를 읽어옴링크: 레퍼런스 연결초기화: static 값들 초기화 및 변수에 할당메소드 영역: 클래스 수준의 정보를 저장(클래스 이름, 부모 클래스 이름, 메소드, 변수)저장, 공유자원힙 영역: 객체를 저장,
.class 에서 바이트 코드를 읽고 메모리에 저장하는 역할 수행작성한 코드 대부분은 app 클래스 로더가 읽음. 클래스를 읽을 때, 부모 클래스에게 먼저 요청. 모든 부모 클래스가 읽지 못했을 때 자신이 읽음. 자신도 읽지 못하면 -> ClassNotFoundExce
바이트 코드 조작으로 클래스 로딩 직전에도 클래스 파일만 있으면, 정보를 빼오거나 새로운 클래스를 만드는 등 여러가지를 할 수 있음테스트 코드가 소스코드의 얼만큼을 테스트 했는지에 대한 측정JaCoCopom.xml에 플러그인을 추가cmd창에 "mvn clean veri
구체적인 클래스 타입을 알지 못해도 해당 클래스의 객체 생성, 메소드, 타입, 변수들에 접근할 수 있도록 도와주는 Java API리플렉션의 시작 - Classhttps://docs.oracle.com/javase/8/docs/api/java/lang/Class
런타임 시점에 특정 인터페이스들을 구현하는 클래스, 인스턴스를 만드는 것Spring AOP를 기반으로 동작하여 RepositoryFactorySupport에서 프록시를 생성프록시와 리얼 서브젝트가 공유하는 인터페이스가 있고, 클라이언트는 해당 인터페이스 타입으로 프록시
표준적으로 작성해야 할 코드를 개발자 대신 생성해주는 라이브러리@Getter, @Setter, @Builder 등롬복 사용하기의존성 추가IntelliJ lombok 플러그인 설치IntelliJ Annotation Processing 옵션 활성화롬복 동작 원리컴파일 시점
함수형 인터페이스(Functional Interface)추상 메소드를 하나만 가지고 있는 인터페이스, 위반시 컴파일 에러SAM(Single Abstract Method) 인터페이스@FunctionalInterface 애노테이션을 가지고 있는 인터페이스static, de
기본 메소드(Dafault Methods)인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법해당 인터페이스를 구현한 클래스를 깨뜨리지 않고 새 기능을 추가할 수 있음기본 메소드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있음컴파일 에러는 아니지만 구현체에
streamsequence of elements supporting sequential and parallel aggregate operations데이터를 담고 있는 저장소(컬렉션)이 아님Functional in nature, 스트림이 처리하는 데이터 소스를 변경하지
NullPointerException의 원인null을 리턴, null 체크 안함메소드에서 작업 중 특별한 상황에서 값을 제대로 리턴 할 수 없는 경우 선택할 수 있는 방법예외를 던짐(스택 트레이스를 찍기에 비쌈) - 필요할 때가 아닌, 로직을 처리할 때 에러를 처리하는
자바 8에 새로운 날짜와 시간 APi가 생긴 이유그 전까지 사용한 java.util.Date 클래스는 mutable(객체의 상태를 바꿀 수 있음)하기 때문에 thread safe(멀티 쓰레드 환경에서 안전하게 쓰이지 않음)하지 않음클래스 이름이 명확하지 않음(Date인
자바에서 비동기 프로그래밍을 가능하게 하는 인터페이스Concurrent 소프트웨어동시에 여러 작업을 할 수 있는 소프트웨어예) 웹 브라우저로 유튜브를 보면서 키보드로 문서에 타이핑을 할 수 있음예) 녹화를 하면서 IntelliJ로 코딩을 하고 워드에 적어둔 문서를 보거
애노테이션 관련 두가지 큰 변화자바8부터 애노테이션을 타입 선언부에도 사용할 수 있게됨자바8부터 애노테이션을 중복해서 사용할 수 있게됨타입 선언부제네릭 타입변수 타입매개변수 타입예외 타입 등타입에 사용할 수 있으려면TYPE_PARAMETER: 타입 변수에만 사용할 수
자바 개발자가 가장 많이 사용하는 테스팅 프레임워크자바8 이상을 필요로 함대체: TestNG, Spock 등JUnit5의 세부 모듈Platform: 테스트를 실행해주는 런처 제공(TestEngine API 제공)Jupiter: TestEngine API 구현체로 JUn
Mock: 진짜 객체와 비슷하게 동작하지만 프로그래머가 직접 그 객체의 행동을 관리하는 객체Mockito: Mock 객체를 쉽게 만들고 관리하고 검증할 수 있는 방법 제공테스트를 작성하는 자바 개발자 50%+ 사용하는 Mock 프레임워크스프링 부터 2.2+ 프로젝트 생
테스트에서 도커 컨테이너를 실행할 수 있는 라이브러리테스트 실행시 DB를 설정하거나 별도의 프로그램 또는 스크립트를 실행할 필요 없음보다 Production에 가까운 테스트를 만들 수 있음테스트가 느려짐Testcontainers JUnit5 지원 모듈 설치@Testco
성능 측정 및 부하(load) 테스트 기능을 제공하는 오픈 소스 자바 어플리케이션다양한 형태의 어플리케이션 테스트 지원웹-HTTP, HTTPSSoAP/REST 웹 서비스FTP데이터베이스(JDBC사용)Mail(SMTP, POP3, IMAP)CLI 지원CI또는 CD 툴과
운영 환경에서 발생하는 문제들을 미리 제한된 환경에서 확인카오스 엔지니어링 툴프로덕션 환경, 특히 분산 시스템 환경에서 불확실성을 파악하고 해결 방안을 모색하는 데 사용하는 툴운영 환경 불확실성의 예네트워크 지연서버 장애디스크 오작동메모리 누수 등Chaos Monkey
어플리케이션의 아키텍처를 테스트 할 수 있는 오픈 소스 라이브러리로 패키지, 클래스, 레이어, 슬라이스 간 의존성을 확인할 수 있는 기능을 제공한다.아키텍처 테스트 유스 케이스(Circular Dependancy 확인)circular dependency가 있으면 코드