🔹 주간 목표

  • Java 문자열 과제
  • Stream/예외처리 복습
  • Spring 강의 챕터9-10



서론

다른건 다 괜찮았는데 Spring은 솔직히 이론강의만 먼저 듣고는 전혀 무슨소리인지 1도 모르겠다.
대충 넘기고 예제/실습해보는 중인데 조금 익숙해지면 그때 이론을 상세하게 볼 예정이다.



문자열 과제

public class Practice04 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        StringBuilder sb = new StringBuilder(s);
        sb.reverse();

딱히 어려운건 없었는데 4번문제에서 이전까지는 입출력 시 주로 Scanner를 사용해서 예외처리를 할 필요가 없었는데 BufferedReader, StringBuilder도 이용해보고 IOException을 사용해볼 수 있는 문제여서 좋았다.



Java

지난주 시간에쫓겨 미흡했던 부분 복습 및 정리
[TIL] Stream / 예외처리



Spring

  • 스프링 컨테이너
    : applicationContext 인터페이스를 통해 제공되는 스프링 컨테이너는 Bean 객체생성 및 조립 담당

  • java bean
    : 우리가 데이터를 쉽게 저장했다가 꺼낼 수 있는 property와 getter, setter로 이루어진 단순한 구조의 클래스

  • bean등록
    :annotation 기반으로 bean 등록
    • bean 등록 시 정보
      : class 경로, bean 이름
    • scope : bean을 생성하는 규칙
      • singleton : 컨테이너 단일로 생성
      • prototype : 작업할 때 마다 bean을 새로 생성하고 싶은 경우
      • request : 요청마다 새롭게 bean을 생성하고 싶은 경우
    • bean lifeCycle callback
      • call back : 어떤 이벤트가 발생하는 경우 호출되는 메서드
      • lifecycle callback : bean을 생성하고 초기화하고 파괴하는 등 특정 시점에 호출되도록 정의된 함수
        (주로 PostConstruct - bean 생성 시점에 필요한 작업 수행 / PreDestroy - bean 파괴 시점에 필요한 작업 수행 사용)

Aspect Oriented Programming(관점 지향 프로그래밍)

: 특정한 함수 호출 전후에 공통적인 처리가 필요할 때,
OOP로 처리하기에는 다소 까다로운 부분을 AOP처리방식을 도입하여 손쉽게 공통기능을 추가/수정/삭제 가능하다.

  • AOP의 기본 개념
    Aspect : 여러 클래스나 기능에 걸쳐서 있는 관심사를 모듈화 한 것

(흩어진 관심사 = 소스 코드 상에서 다른 부분에 계속 반복해서 쓰는 코드들)

  • AOP중에서 가장 많이 활용되는 기능 : @Transactional(트랜잭션 관리)

-Advice : 조언, AOP에서 실제로 적용하는 기능(로깅/트랜잭션/인증)
-Join Point : 모듈화된 특정 기능이 실행될 수 있는 연결 포인트
-Pointcut : Join Point 중 해당 Aspect를 적용할 대상을 뽑을 조건식



유효성 검증(Validation)

:올바르지 않은 데이터를 걸러내고 보안을 유지하기 위함

Spring Validation에서 주로 쓰는 두가지 방법

  1. Java Bean Validation
    : java bean 기반으로 간편하게 개별데이터 검증
  2. 스프링 벨리데이터 인터페이스 구현을 통한 validation

❗️ 벨리데이션 수행 시 주의사항

  • 중복 검증/동일한 정책인지 -> 로직 초기에 되도록 수행 필요


Lombok

: 반복적, 기계적 메소드 관련 작업을 간편하게 해주는 라이브러리

import lombok.*;
import java.time.LocalDateTime;

@Setter
@Getter
@ToString
@Builder

@Data
public class DevDto {
    String name;
    Integer age;
    LocalDateTime startAt;
    }
  • 주로 Getter, Setter, ToString 어노테이션을 사용한다.
  • Data 어노테이션은 편리하긴 하지만 예측하지 못하게 동작될 수 있기때문에 사용하기보다 어노테이션을 하나하나 명시해주는게 좋다.

  • Builder 사용의 장점
class DevDtoTest {
    @Test
    void test() {
        DevDto devDto = DevDto.builder()
                .name("iffyian")
                .age(26)
                .startAt(LocalDateTime.now())
                .build();

        System.out.println(devDto);
    }
}

Setter를 사용했을 때 보다 코드 응집력이 좋으며 유연성과 가독성을 높일 수 있고 불변성을 확보할 수 있다.



🔹 다음 주간목표

  • Spring 강의
  • Java OOP 복습/자바의 정석
profile
이안이의 우당탕탕 개발기

0개의 댓글