본문 바로가기

분류 전체보기

(249)
[더 자바] 바이트 코드 조작 인프런에서 백기선님의 더 자바, 코드를 조작하는 다양한 방법을 공부하며 개인적으로 정리한 글입니다. 코드 커버리지 코드 커버리지는 내가 작성한 테스트 코드가 내 코드를 얼마나 커버했는지의 정도를 말한다. 즉, 테스트 코드가 내 코드를 구석구석 잘 테스트 했는지를 알 수 있다. Jacoco 를 이용한 예시 Jacoco 를 통해 코드 커버리지를 측정하는 예시를 살펴보자. 먼저 다음과 같은 간단한 클래스 하나를 만든다. public class Moim { int maxNumOfAttendees; int numOfEnrollment; public boolean isEnrollmentFull() { if (maxNumOfAttendees == 0) return false; if (numOfEnrollment < ..
[디자인 패턴 8편] 구조 패턴, 데코레이터(Decorator) 1. 개념 데코레이터 패턴은 기본 객체에 추가적인 기능을 동적으로 유연하게 첨가하는 패턴이다. 1.1. 장점 객체에 동적으로 기능 추가가 간단하게 가능하다. 1.2. 단점 자잘한 데코레이터 클래스들이 계속 추가되어 클래스가 많아질 수 있다. 겹겹이 애워싸고 있기 때문에 객체의 정체를 알기 힘들고 복잡해질 수 있다. 1.3. 활용 상황 객체가 상황에 따라 다양한 기능이 추가되거나 삭제되어야 할 때. 2. 구조 Component ConcreteComponent 과 Decorator 가 구현할 인터페이스다. 두 객체를 동등하게 다루기 위해 존재함 ConcreteComponent Decorate 를 받을 객체다. 즉, 기능 추가를 받을 기본 객체 Decorator Decorate 를 할 객체의 추상 클래스다. ..
[더 자바] 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..
[디자인 패턴 7편] 구조 패턴, 컴퍼지트(Composite) 1. 개념 컴퍼지트 패턴은 단일 객체와 그 객체들을 가지는 집합 객체를 같은 타입으로 취급하며, 트리 구조로 객체들을 엮는 패턴이다. 1.1. 장점 객체들이 모두 같은 타입으로 취급되기 때문에 새로운 클래스 추가가 용이하다. 단일객체, 집합객체 구분하지 않고 코드 작성이 가능하다. 1.2. 단점 설계를 일반화 시켜 객체간의 구분, 제약이 힘들다. 1.3. 활용 상황 객체들 간에 계급 및 계층구조가 있고 이를 표현해야할 때 클라이언트가 단일 객체와 집합 객체를 구분하지 않고 동일한 형태로 사용하고자 할 때 2. 구조 Component Leaf와 Composite 가 구현해야하는 Interface 로, Leaf 와 Composite 는 모두 Component 라는 같은 타입으로 다뤄진다. Leaf 단일 객체..
[스프링 프레임워크 핵심 기술] 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 { } 사용 설정 예를 들어..