-
Notifications
You must be signed in to change notification settings - Fork 0
박혜성 3주차 학습 일지
- 월요일에 계획했던 대로 기능 우선 개발을 통해 WAS 4, 5, 6 단계의 개발을 수요일에 완료하였습니다.
- 기능 개발 완료 후 리팩토링을 통해 객체의 생성과 의존성 주입을 담당할 빈 팩토리, 어노테이션 기반의 사용자 요청 처리 메서드 조회를 구현하여 테스트하기 쉽고, 기존 코드 변경을 최소화할 수 있는 구조를 만들었습니다.
- 테크니컬 라이팅 특강을 들으며 정보 전달을 위한 글을 더 깔끔하게 다듬을 수 있는 방법을 알게 되었습니다. 블로그 글뿐만 아니라 이력서, 포트폴리오에도 유용하게 적용할 수 있을 것 같습니다.
- JVM 수업을 들으며 개념을 정리하는 시간을 가졌습니다.
- WAS 미션에서 구현한 기능의 화면 완성도가 떨어집니다.
- 사용자가 빈 팩토리가 관리할 객체를 지정하기 위해 빈 팩토리 클래스에 직접 설정 클래스를 추가하면서 코드를 변경하는 문제가 있습니다.
- 빈 팩토리의 의존성 주입이 정상 작동하기 위해서는 의존하는 객체가 먼저 빈 팩토리에 등록되어야 하는 문제가 있습니다.
- JVM에서 런타임 상수 풀, G1 GC에 대한 지식이 부족합니다.
- 다음주에는 기능 개발을 우선적으로 진행합니다. 단, 퀄리티에도 좀 더 신경씁니다.
- 빈 팩토리 클래스에 설정 파일을 직접 등록하는 대신 특정 패키지 또는 클래스 하위의 설정 파일을 읽어올 수 있도록 개선합니다.
- 객체가 빈 팩토리에 등록되는 순서에 상관없이 의존성 주입을 사용할 수 있는 방법을 고민합니다.
- 이번에 제출한 블로그 게시물에 테크니컬 라이팅에서 배운 지식을 적용해봅니다.
- 런타임 상수 풀, G1 GC를 정리합니다.
어노테이션은 클래스 또는 인터페이스를 컴파일하거나 실행할 때 어떻게 처리해야 할 것인지를 알려주는 설정 정보입니다. 어노테이션은 다음 세 가지 용도로 사용됩니다.
- 컴파일 시 사용하는 정보 전달
- 빌드 툴이 코드를 자동으로 생성할 떄 사용하는 정보 전달
- 실행 시 특정 기능을 처리할 때 사용하는 정보 전달
컴파일 시 사용하는 정보 전달의 대표적인 예가 @Override
입니다. @Override
는 컴파일러가 메서드 재정의 검사를 하도록 설정합니다.
public @interface MyAnnotation {
String value();
}
어노테이션은 기본 속성인 value
를 가질 수 있습니다. 이를 이용하는 경우 어노테이션을 사용하면서 별도의 속성을 명시하지 않아도 곧바로 value
로 값이 대입됩니다.
@MyAnnotation("hello")
단, 다른 속성을 함께 사용하는 경우에는 value
속성 이름을 반드시 사용해야 합니다.
@MyAnnotation(value = "hello", value2 = "hello2")
어떤 대상에 설정 정보를 알려줄 지 명시해야 합니다. 적용 대상은 @Target
어노테이션에 ElementType
을 입력하여 지정할 수 있습니다.
ElementType | 적용 요소 |
---|---|
TYPE | 클래스, 인터페이스, 열거형 |
ANNOTATION_TYPE | 어노테이션 |
FIELD | 필드 |
CONSTRUCTOR | 생성자 |
METHOD | 메서드 |
LOCAL_VARIABLE | 지역 변수 |
PACKAGE | 패키지 |
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface MyAnnotation {}
어노테이션을 정의할 때 어노테이션을 언제까지 유지할 것인지 지정해야 합니다. 유지 정책은 @Retention
어노테이션에 RetentionPolicy
를 입력하여 지정할 수 있습니다.
RetentionPolicy | 어노테이션 적용 시점 | 어노테이션 제거 시점 |
---|---|---|
SOURCE | 컴파일할 때 적용 | 컴파일된 후에 제거됨 |
CLASS | 메모리로 로딩할 때 적용 | 메모리로 로딩된 후에 제거됨 |
RUNTIME | 실행할 때 적용 | 계속 유지됨 |
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {}
어노테이션은 그 자체로는 아무런 동작을 가지지 않습니다. 하지만 리플렉션과 조합하면 다양한 행위를 수행할 수 있습니다.
참고: 신용권, 이것이 자바다, 한빛미디어
주어진 명령을 미래의 어느 시점에 실행합니다. 명령은 새로운 스레드, 스레드 풀, 호출한 스레드 등 Executor
의 구현에 따라 다른 방식으로 실행될 수 있습니다.
실행을 위해 값을 반환하는 작업을 제출하고 작업의 보류된 결과를 나타내는 Future를 반환합니다. Future의 get
메서드는 작업의 결과를 반환합니다.