더 자바, Java 8 - 인프런 | 강의 자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합니다. 이 www.inflearn.com Optional은 언제 사용되는 것인가? 아래 소스를 확인해보자. public class App { public static void main(String[] args) { OnlineClass spring_boot = new OnlineClass(1, "spring boot", true); Duration studyDuration = spring_boot.getProgress().getStudyDuration(); //출력을 하면 결과는 어떻..
더 자바, Java 8 - 인프런 | 강의 자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합니다. 이 www.inflearn.com 스트림 데이터를 담고 있는 저장소(컬렉션)이 아니다. 스트림이 처리하는 데이터 소스를 변경하지 않는다. List names = new ArrayList(); names.add("mesung"); names.add("ms"); names.add("11st"); Stream stringStream = names.stream().map(String::toUpperCase); //대문자로 변경하는 로직을 태워도 names의 근본 값들은 변경되지 않는다..
프록시 패턴이란, 프록시는 대리한다 라는 개념으로 리얼 서브젝트를 참조하고 있다. 서브젝트는 인터페이스로서 프록시와 리얼 서브젝트가 공유하고 있고, 클라이언트는 서브젝트 인터페이스 타입으로 프록시를 사용한다. 클라이언트는 프록시를 거쳐 리얼 서브젝트를 사용하기 때문에 프록시는 리얼 서브젝트에 대한 접근을 관리하거나 부가기능을 제공하고 리턴값을 변경할 수도 있다. 리얼 서브젝트는 자신이 해야할 일만 하면서(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
- effectivejava
- 연관관계
- try with resources
- package-private
- java8
- mustache
- 이펙티브자바
- jdk버전
- 인프런
- 스프링부트
- 김영한
- @Lazy
- try catch finally
- Effective Java
- JPA
- 빈 순환 참조
- junit
- 복사 팩토리
- 자바8
- 정적팩터리메서드
- java
- 팩토리 메소드 패턴
- 빌더 패턴
- 이펙티브 자바
- flatMap
- Spring
- 점층적 생성 패턴
- springboot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |