본문 바로가기

더 나은 엔지니어가 되기 위해/지금은 안쓰는 자바

(35)
[스프링 프레임워크 핵심 기술] AOP 인프런에서 백기선님의 스프링 프레임워크 핵심 기술 을 공부하며 개인적으로 정리한 글입니다. AOP 란 개념 AOP(Aspect-Oriented Programming) 는 OOP를 보완하는 수단으로, 흩어진 Aspect 를 모듈화 할 수 있는 프로그래밍 기법이다. 즉, 여러 곳에서 쓰이는 공통 기능을 모듈화하고, 쓰이는 곳에 필요할 때 연결함으로써, 유지 보수 혹은 재사용에 용이하도록 프로그래밍 하는 것. 주요 개념 Aspect 여러 곳에서 쓰이는 코드(공통 부분)를 모듈화한 것 Target Aspect 가 적용되는 곳 Advice Aspect 에서 실질적인 기능에 대한 구현체 Joint point Advice 가 Target 에 적용되는 시점 메서드 진입할 때, 생성자 호출할 때, 필드에서 값을 꺼낼 때..
[스프링 프레임워크 핵심 기술] SpEL 인프런에서 백기선님의 스프링 프레임워크 핵심 기술 을 공부하며 개인적으로 정리한 글입니다. SpEL SpEL 은 Spring Expression Language 로, 스프링에서 지원하는 일종의 표현식이다. 1) 예시 예를 들면 아래 같이 사용된다. @Value("#{1 + 1}") int value; 결과적으로 1 + 1 의 결과가 int value 에 담긴다. @Value("#{'hello' + ' world'}") String greeting; String greeting 에는 "hello world" 가 담긴다. 즉, 코드 내에서 #{...} 로 표현되는 부분들은 SpEL 이라고 보면 된다. 2) 문법 사용 문법은 다음과 같다. #{"표현식"} ${"프로퍼티"} 표현식은..
[더 자바] 바이트 코드 조작 인프런에서 백기선님의 더 자바, 코드를 조작하는 다양한 방법을 공부하며 개인적으로 정리한 글입니다. 코드 커버리지 코드 커버리지는 내가 작성한 테스트 코드가 내 코드를 얼마나 커버했는지의 정도를 말한다. 즉, 테스트 코드가 내 코드를 구석구석 잘 테스트 했는지를 알 수 있다. Jacoco 를 이용한 예시 Jacoco 를 통해 코드 커버리지를 측정하는 예시를 살펴보자. 먼저 다음과 같은 간단한 클래스 하나를 만든다. public class Moim { int maxNumOfAttendees; int numOfEnrollment; public boolean isEnrollmentFull() { if (maxNumOfAttendees == 0) return false; if (numOfEnrollment < ..
[더 자바] JVM 이해하기 인프런에서 백기선님의 더 자바, 코드를 조작하는 다양한 방법을 공부하며 개인적으로 정리한 글입니다. JVM, JRE, JDK, Java 4개를 좀 구분해서 알아놓을 필요가 있다. JVM (Java Virtual Machine) .class 파일을 OS 에 맞는 machine code 로 변환 (인터프리터 & JIT 컴파일러) 플랫폼(OS) 에 종속적 JRE (Java Runtime Environment) JVM + 핵심 라이브러리 개발 관련 x. 실행 관련 o java 는 보통 JRE 단위로 배포됨 JDK (Java Development Kit) JRE + 개발 툴(java c) 자바 11부터는 JDK 단위로 배포됨. Java 소스 코드(java 언어) 자체는 플랫폼에 독립적 javac 에 의해 .cla..
[스프링 프레임워크 핵심 기술] 데이터 바인딩 추상화 인프런에서 백기선님의 스프링 프레임워크 핵심 기술 을 공부하며 개인적으로 정리한 글입니다. 데이터 바인딩 데이터 바인딩은 넘어오는 값을 동적으로 객체에 할당(바인딩) 해주는 것을 의미한다. 이번 포스팅에서는 데이터 바인딩을 어떻게 하고, 어떻게 동작하는지에 대해 알아본다. PropertyEditor PropertyEditor 를 사용해서 바인딩하는 방법을 알아보자. 먼저, 바인딩 시킬 객체와 값을 입력받는 컨트롤러를 정의하자. public class Event { private Integer id; private String title; public Event(Integer id) { this.id = id; } ... getter, setter and toString ... } @RestControll..
[스프링 프레임워크 핵심 기술] Resource / Validation 추상화 인프런에서 백기선님의 스프링 프레임워크 핵심 기술 을 공부하며 개인적으로 정리한 글입니다. Resource 추상화 애플리케이션에서 사용하는 리소스 인터페이스. Resource 라는 인터페이스로 추상화 되어있으며, 기본적으로 java.net.URL 을 스프링 프레임워크에 맞게 추상화 한 것이다. 1) 주요 메쏘드 기본적으로 다음과 같은 메쏘드가 구현되어 있다. InputStream getInputStream() boolean exists() boolean isOpen() String getDescription() 2) 구현체 Resource 를 구체적으로 구현한 클래스는 다음과 같다. UrlResource java.net.URL 을 참고. http, https, ftp, file, jar 지원 ClassP..
[스프링 프레임워크 핵심 기술] IoC 컨테이너 3 인프런에서 백기선님의 스프링 프레임워크 핵심 기술 을 공부하며 개인적으로 정리한 글입니다. MessageSource MessageSource 객체는 다국어에 관련된 메시지 포매팅을 해주는 역할을 담당한다. 다음 예를 살펴보면 쉽게 이해가 간다. 먼저 다음과 같은 프로퍼티 파일들을 정의하자. # messages.properties greeting = Hello, {0} # messages_ko_KR.properties greeting = 안녕, {0} 이후 다음과 같은 Runner 를 만들자. @Component public class AppRunner implements ApplicationRunner { @Autowired MessageSource messageSource; @Override publi..
[스프링 프레임워크 핵심 기술] IoC 컨테이너 2 인프런에서 백기선님의 스프링 프레임워크 핵심 기술 을 공부하며 개인적으로 정리한 글입니다. Profile Profile 은 빈들의 그룹이다. 예를 들어, 테스트 환경에서는 A 라는 빈을 사용하고 싶고, 배포 환경에서는 B 라는 빈을 사용하고 싶을 때, Profile 을 통해 이러한 설정을 잡아줄 수 있다. 정의 @Profile("이름") 을 통해 정해줄 수 있다. @Repository @Profile("test") public class TestBookRepository implements BookRepository { } @Repository @Profile("prod") public class ProdBookRepository implements BookRepository { } 사용 설정 예를 들어..