다른건 다 괜찮았는데 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을 사용해볼 수 있는 문제여서 좋았다.
지난주 시간에쫓겨 미흡했던 부분 복습 및 정리
[TIL] Stream / 예외처리
스프링 컨테이너
: 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 파괴 시점에 필요한 작업 수행 사용)
: 특정한 함수 호출 전후에 공통적인 처리가 필요할 때,
OOP로 처리하기에는 다소 까다로운 부분을 AOP처리방식을 도입하여 손쉽게 공통기능을 추가/수정/삭제 가능하다.
(흩어진 관심사 = 소스 코드 상에서 다른 부분에 계속 반복해서 쓰는 코드들)
-Advice : 조언, AOP에서 실제로 적용하는 기능(로깅/트랜잭션/인증)
-Join Point : 모듈화된 특정 기능이 실행될 수 있는 연결 포인트
-Pointcut : Join Point 중 해당 Aspect를 적용할 대상을 뽑을 조건식
:올바르지 않은 데이터를 걸러내고 보안을 유지하기 위함
Spring Validation에서 주로 쓰는 두가지 방법
❗️ 벨리데이션 수행 시 주의사항
: 반복적, 기계적 메소드 관련 작업을 간편하게 해주는 라이브러리
import lombok.*;
import java.time.LocalDateTime;
@Setter
@Getter
@ToString
@Builder
@Data
public class DevDto {
String name;
Integer age;
LocalDateTime startAt;
}
class DevDtoTest {
@Test
void test() {
DevDto devDto = DevDto.builder()
.name("iffyian")
.age(26)
.startAt(LocalDateTime.now())
.build();
System.out.println(devDto);
}
}
Setter를 사용했을 때 보다 코드 응집력이 좋으며 유연성과 가독성을 높일 수 있고 불변성을 확보할 수 있다.