Skip to content

박혜성 3주차 학습 일지

hseong3243 edited this page Jul 13, 2024 · 2 revisions

회고

Keep

  • 월요일에 계획했던 대로 기능 우선 개발을 통해 WAS 4, 5, 6 단계의 개발을 수요일에 완료하였습니다.
  • 기능 개발 완료 후 리팩토링을 통해 객체의 생성과 의존성 주입을 담당할 빈 팩토리, 어노테이션 기반의 사용자 요청 처리 메서드 조회를 구현하여 테스트하기 쉽고, 기존 코드 변경을 최소화할 수 있는 구조를 만들었습니다.
  • 테크니컬 라이팅 특강을 들으며 정보 전달을 위한 글을 더 깔끔하게 다듬을 수 있는 방법을 알게 되었습니다. 블로그 글뿐만 아니라 이력서, 포트폴리오에도 유용하게 적용할 수 있을 것 같습니다.
  • JVM 수업을 들으며 개념을 정리하는 시간을 가졌습니다.

Problem

  • WAS 미션에서 구현한 기능의 화면 완성도가 떨어집니다.
  • 사용자가 빈 팩토리가 관리할 객체를 지정하기 위해 빈 팩토리 클래스에 직접 설정 클래스를 추가하면서 코드를 변경하는 문제가 있습니다.
  • 빈 팩토리의 의존성 주입이 정상 작동하기 위해서는 의존하는 객체가 먼저 빈 팩토리에 등록되어야 하는 문제가 있습니다.
  • JVM에서 런타임 상수 풀, G1 GC에 대한 지식이 부족합니다.

Try

  • 다음주에는 기능 개발을 우선적으로 진행합니다. 단, 퀄리티에도 좀 더 신경씁니다.
  • 빈 팩토리 클래스에 설정 파일을 직접 등록하는 대신 특정 패키지 또는 클래스 하위의 설정 파일을 읽어올 수 있도록 개선합니다.
  • 객체가 빈 팩토리에 등록되는 순서에 상관없이 의존성 주입을 사용할 수 있는 방법을 고민합니다.
  • 이번에 제출한 블로그 게시물에 테크니컬 라이팅에서 배운 지식을 적용해봅니다.
  • 런타임 상수 풀, 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.execute()ExecutorService.submit()의 차이

Executor

void execute(Runnable command)

주어진 명령을 미래의 어느 시점에 실행합니다. 명령은 새로운 스레드, 스레드 풀, 호출한 스레드 등 Executor의 구현에 따라 다른 방식으로 실행될 수 있습니다.

ExcutorService

Future submit(Callable task)

실행을 위해 값을 반환하는 작업을 제출하고 작업의 보류된 결과를 나타내는 Future를 반환합니다. Future의 get 메서드는 작업의 결과를 반환합니다.

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally