java-servlet-jsp 3일차

박상원·2024년 2월 13일

java-servlet-jsp

목록 보기
2/3

MVC


  • Model: 비즈니스 로직 및 데이터 처리 담당
  • View: 모델이 처리한 결과 데이터의 화면 생성 담당
  • Controller: 요청 처리 및 흐름 제어 담당

MVC Pattern의 장점

  • 유연하고 확장이 용이
  • 협업이 용이
  • 유지보수 용이

Command pattern


  • 요청을 객체의 형태로 캡슐화하여
  • command를 저장하거나 메서드에 전달하거나 다른 객체들처럼 반환할 수 있게 해주는 디자인 패턴

Command 패턴은 객체 지향 디자인 패턴 중 하나로, 요청을 객체로 캡슐화하여 요청을 수신하는 객체가 이를 처리할 수 있도록 하는 패턴입니다.
Command 패턴은 다음과 같은 구성 요소로 이루어집니다.

  • Command: 요청을 캡슐화하는 인터페이스를 정의합니다. Command 인터페이스는 execute() 메서드를 선언합니다.
  • ConcreteCommand: Command 인터페이스를 구현한 구체적인 클래스입니다. execute() 메서드를 구현하여 실제 요청 처리를 수행합니다.
  • Invoker: 요청을 수신하는 객체를 정의합니다. Invoker는 Command 객체를 유지하고, execute() 메서드를 호출하여 요청을 처리합니다.
  • Receiver: 실제 요청 처리를 수행하는 객체입니다. ConcreteCommand는 Receiver 객체를 호출하여 실제 요청 처리를 수행합니다.

Command 패턴을 사용하면 다음과 같은 이점이 있습니다.

  • 요청 처리 과정을 캡슐화하므로, 요청 처리 과정의 변경이나 확장에 유연하게 대응할 수 있습니다.
  • 요청 처리에 대한 로깅, 취소, 다시 실행 등의 기능을 구현하기 쉽습니다.
  • 객체 간의 의존성을 줄일 수 있으며, 객체 간의 결합도를 낮출 수 있습니다.

Command 패턴은 GUI 애플리케이션에서는 메뉴나 버튼 등의 요소들과 이벤트 핸들러 등에서 사용됩니다.
또한, 웹 애플리케이션에서도 HTTP 요청과 응답 처리에 Command 패턴을 적용할 수 있습니다.

FrontController

  • 웹 사이트의 모든 요청을 처리하는 컨트롤러
  • 보안, 국제화, 뷰 제공 등의 공통적인 작업을 수행

Reflection

  • Reflection은 java 프로그래밍 언어의 기능이며, 실행 중인 Java 프로그램이 자체적으로 검사하거나 프로그램 내부 속성을 조작할 수 있다.
  • 자체적으로 생성된 객체의 class type을 알지 못하더라도 해당 class의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 Java api 이다.

리플랙션 API를 이용한 의존성 주입(DI)


  • 의존성을 주입해주기 위한 @Autowired annotation 인터페이스를 이용해서 생성합니다.

Annotation


Java Doc

  • java에서는 소스코드에 대한 문서를 따로 만들기 보다는 소스코드와 문서를 하나의 파일로 관리하기 위해서 주석에 "//" 소스코드에 대한 정보를 저장하고 HTML문서로 만들어서 문서화를 했다.
    |tag|설명|
    |---|---|
    |@author|클래스나 인터페이스의 제작자 표시|
    |@version|클래스나 인터페이스에서의 버전 정보|
    |@param|매개 변수에 대한 설명|
    |@return|메소드가 void를 리턴하거나 생성자가 아닌 경우를 제외하고 모두 사용해야 함|
    |@exception, @throws|메소드가 발생시킬 수 있는 예외를 기술|
    |@deprecated|다음 버전에서 폐기된 메소드를 알림|
    |@serial|기본적으로 직렬화 할 수 있는 클래스의 멤버를 설명|
    |@see|어떤 클래스, 인터페이스, 메소드, 생성자 혹은 URL에 대한 전후참조 표시 - 분리된 줄에 링크가 생김|
    |@since|Tag를 가진 객체가 언제 추가되었는지 명시|
    |{@link #entity label}|메소드나 필드의 상호 참조에 대한 링크를 표시문서 텍스트 안에 링크가 생김|
    |{@doc-rood}|문서에 대한 루트 디렉토리에 대한 상대경로 지정|

Annotation이란?

  • 프로그램을 구성하는 직접적인 코드는 아니지만 프로그램 작성에 도움을 주거나 필요한 데이터를 제공한다.
  • JavaDoc은 Annotation일까?
    • 주석은 주석이고 Annotation은 Annotation이다.

Annotation의 용도

  • 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
  • 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공
    • Lombok
  • 런타임시 특정 기능을 실행하도록 정보 제공
  • AOP 관점지향 프로그래밍

Annotation 형식


@ 뒤에 어노테이션 이름을 붙이는 형식으로 구성되어 있다.

  • 대표적으로 @Override Annotation이 있다.
    • Annotation에 설정할 별도의 요소가 없는 경우 Marker annotation이라고 한다.

@SuppressWarnings

  • 알고 있는 내용으로 경고 필요 없음 즉 컴파일 경고를 무시하도록 합니다.
  • all: 모든 경고
  • cast: 캐스트 연산자 관련 경고
  • dep-ann: 사용하지 말아야 할 주석 관련 경고
  • deprecation: 사용하지 말아야 할 메서드 관련 경고
  • fallthrough: switch문에서 break 누락 관련 경고
  • finally: 반환하지 않는 finally 블럭 관련 경고
  • null: null 분석 관련 경고
  • rawtypes: 제네릭을 사용하는 클래스 매개변수가 불특정일 때의 경고
  • unchecked: 검증되지 않은 연산자 관련 경고
  • unused: 사용하지 않는 코드 관련 경고

@SafeVarargs

  • 제네릭스 타입의 가변인자에 사용한다.
  • 컴파일러가 확인하기 어려운 까다로운 문제
  • heap pollution 문제

@Native

  • native 메소드에서 참조되는 상수 앞에 붙인다.

native method
다른 언어로 작성된 코드를 호출하도록 만들어진 규약이다.

Meta Annotation


  • Java5에 추가된 기능으로 어노테이션을 선언할 때 사용하는 어노테이션이다.

@Target

  • Annotation이 적용가능한 대상을 지정하는데 사용한다.
  • 즉 컴파일러가 Annotation을 어디에 적용할지 결정하는 Annotation이다.
  • Annotation 적용 위치
    • ElementType.PACKAGE: 패키지 선언
    • ElementType.TYPE: 타입 선언
    • ElementType.ANNOTATION_TYPE: 어노테이션 타입 선언
    • ElementType.CONSTRUCTOR: 생성자 선언
    • ElementType.FIELD: 멤버 변수 선언
    • ElementType.LOCAL_VARIABLE: 지역 변수 선언
    • ElementType.METHOD: 메서드 선언
    • ElementType.PARAMETER: 전달인자 선언
    • ElementType.TYPE_PARAMETER: 전달인자 선언
    • ElementType.TYPE_USE: 타입 선언

@Retention

  • Annotation이 유지되는 범위를 지정하는데 사용한다.
  • 범위
    • RetentionPolicy.RUNTIME
      • 컴파일 이후에도 JVM에 의해서 계속 참조가 가능하다.
      • 주로 리플렉션이나 로깅에 많이 사용된다.
    • RetentionPolicy.CLASS
      • 컴파일러가 클래스를 참조할 때까지 유효하다.
    • RetentionPolicy.SOURCE
      • 컴파일 전까지만 유효하다.
      • 즉, 컴파일 이후에는 사라지게 된다.

@Ingerited

  • Annotation이 자손 클래스에 상속되도록 한다.

@Deprecated

  • 언제 지원이 중단될지 모르니 사용하지 말 것을 권장함

Repeatable

  • Annotation을 반복해서 적용할 수 있게 한다.

Documented

  • Annotation정보가 Javadoc으로 작성된 문서에 포함되게 한다.

Controller Factory


  • Controller class를 관리하는 ControllerFactory 만들기

0개의 댓글