프록시 패턴이란, 프록시는 대리한다 라는 개념으로 리얼 서브젝트를 참조하고 있다. 서브젝트는 인터페이스로서 프록시와 리얼 서브젝트가 공유하고 있고, 클라이언트는 서브젝트 인터페이스 타입으로 프록시를 사용한다. 클라이언트는 프록시를 거쳐 리얼 서브젝트를 사용하기 때문에 프록시는 리얼 서브젝트에 대한 접근을 관리하거나 부가기능을 제공하고 리턴값을 변경할 수도 있다. 리얼 서브젝트는 자신이 해야할 일만 하면서(SRP) 프록시를 이용해 부가적인 기능(접근제한, AOP, 로깅, 트랜잭션)을 제공할 수 있다. 부가적인 기능마저 리얼 서브젝트에서 제공해주면 매우 복잡해지고 객체지향적 개념에서도 벗어나게 된다. 프록시 패턴을 소스로 확인해보자 //BookService public interface BookService..
의존성 주입해주는 커스텀 애노테이션을 만들자 커스텀 애노테이션을 만들자 @Retention(RetentionPolicy.RUNTIME) public @interface Inject { } 커스텀 애노테이션을 사용해보자 public class BookService { @Inject BookRepository bookRepository; } public class BookRepository { } BookService에서 @Inject를 통해 의존성이 주입되기를 원하고 있다. 먼저 리플렉션을 사용하여 객체가 생성되는 지 확인해보자. public class ContainerServiceTest { @Test public void getObject_BookRepository() { BookRepository b..
Class 인스턴스에 있는 사용자 정의 클래스를 생성해보자 //Book public class Book { public static String A = "A"; private String B = "B"; public Book(){} public Book(String b) { B = b; } public void c() { System.out.println("C"); } public int sum(int left, int right) { return left + right; } } 사용자 정의 클래스의 위치를 활용하여 클래스를 생성해보자. public static void main( String[] args ) throws ClassNotFoundException, NoSuchMethodException,..
Java의 중요 애노테이션 @Retention : 해당 애노테이션을 언제까지 유지할 것인가? source, class, runtime @Inherited : 해당 애노테이션을 하위 클래스까지 전달한다. @Target : 어디에 사용할 수 있는가? type, field, method ... 리플렉션을 사용하여 애노테이션들의 정보를 살펴보자 //custom annotation 1 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.FIELD}) @Inherited public @interface MyAnnotation { String value() default "mesung"; int number() default 100; ..
사용자가 정의한 클래스들은 프로그램 실행 시, 클래스 로더 에 의해 사용자 정의 클래스 타입의 Class 인스턴스들이 힙 영역에 올라간다. 힙 영역에 올라가 있는 사용자 정의 클래스 타입의 Class 인스턴스를 꺼내보자 (3가지 방법) //Book => 사용자가 정의한 클래스 public class App { public static void main( String[] args ) throws ClassNotFoundException { //1. Book.class로 Class 인스턴스에 접근 Class bookClass = Book.class; //2. 사용자 애플리케이션에 생성된 인스턴스를 사용하여 Class 인스턴스에 접근 Book book = new Book(); Class aClass1 = Cl..
Java 프로그램의 실행 과정 Java 프로그램을 실행하면 JVM은 OS로 부터 메모리를 할당받는다. 작성한 .java 파일은 컴파일러에 의해 .class(바이트 코드) 파일로 변환된다. 클래스 로더에 의해서 .class(바이트 코드가 포함된) 파일을 찾아 JVM에 올려놓는다.(런타임) 실행엔진에 의해 .class(바이트 코드가 포함된) 파일을 한줄 씩 실행하게 된다. 클래스 로더 클래스 로더는 위 그림처럼 로딩 - 링크 - 초기화 순으로 진행된다. 로딩 Bootstrap(최상위 부모)
- Total
- Today
- Yesterday
- ifPresent
- try catch finally
- 자바8
- 김영한
- effectivejava
- package-private
- 빌더 패턴
- 이펙티브 자바
- 인프런
- junit
- Spring
- java
- 생성자
- 이펙티브자바
- Effective Java
- mustache
- @Lazy
- springboot
- 점층적 생성 패턴
- JPA
- 팩토리 메소드 패턴
- jdk버전
- 복사 팩토리
- 스프링부트
- 빈 순환 참조
- java8
- 연관관계
- flatMap
- try with resources
- 정적팩터리메서드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |