코트카타
32) 내적
나의 풀이
class Solution {
public int solution(int[] a, int[] b) {
int answer = 0;
int i = 0;
while(i<a.length){
answer += a[i]*b[i];
i++;
}
return answer;
}
}
while문을 사용해서 문제를 해결했다.
보자마자 코딩하기보다는
노트에 정리하면서 문제를 해결하려고 하니까
차분하게 정리가 되는 것 같아서 좋은 습관이라고 생각하고,
앞으로도 이 습관을 유지하고자 한다.
다른 분들의 풀이
import java.util.stream.IntStream;
class Solution {
public int solution(int[] a, int[] b) {
return IntStream.range(0, a.length).map(index -> a[index] * b[index]).sum();
}
}
나는 코트카타 푸는 시간을 다른 분들의 풀이를 보면서 람다&스트림에 대해 공부하고, 익숙해지는 시간이 되기로 했다.
- IntStream.range(0, a.length)
- IntStream.range(startInclusive, endExclusive) 메소드는
특정 범위의 정수 스트림을 생성합니다.
여기서는 0부터 a.length - 1까지의 정수 스트림을 생성합니다. - 이 정수 스트림의 각 값은 배열 a와 b의 인덱스로 사용됩니다.
- IntStream.range(startInclusive, endExclusive) 메소드는
- .map(index -> a[index] * b[index])
- 스트림의 각 요소(index)에 대해 람다식을 실행합니다.
- a[index] * b[index]는 a와 b 배열의 같은 위치에 있는 값을 곱한 결과입니다.
- .sum()
- 스트림의 각 요소(곱한 결과 값)를 모두 더하여 최종 결과를 반환합니다.
키오스크 과제 피드백
Spring 개인 과제 발제를 듣고 낙담해하던 나에게 다시 힘을 주는 피드백이었다.
Spring 입문
6주차
-
- 프론트 컨트롤러 : DispatcherServlet
- 어댑터 패턴 : HandlerAdapter
- View 응답 : View ResolverSpring MVC 구조
- 중요! Client to Server 데이터 전송하는 방법 3가지
- GET + Query Parameter(=Query String)
- POST + HTML Form(x-www-form-urlencoded)
- HTTP Request Body
- 중요! Server to Client 데이터 응답하는 방법 3가지
- 정적 리소스
- View Template
- HTTP Response Body
- Spring Annotation
- Controller
- @Controller(View 응답), @RestController(데이터 응답)
- @RequestMapping(Post, Get, Put, Patch, Delete)
- @PathVariable, @RequestParam, @MoelAttribute, @RequestBody 요청
- @ResponseBody, HttpResponseEntity<> 응답
- 각 어노테이션의 사용법 및 주의사항
- HttpMessageConverter
- Controller
- Layered Architecture
- Controller의 역할을 분담한다.
- Controller
- 요청, 응답
- Service
- 비지니스 로직
- @Service
- Repository
- 데이터베이스 상호 작용
- @Repository
- DTO
- Layer간 데이터 전달
- Prepared Statement
- query를 미리 준비한다.
- Statement에 비해 성능면에서 뛰어나다.
- 웹 보안을 유지할 수 있다.
- Persistence Framework
- JDBC API를 사용한다.
- Prepared Statement를 사용한다.
- JDBC 처럼 복잡함이나 번거로움 없이 간단한 작업만으로 Database와 연동된다.
- 자원 관리(Connection)를 자동으로 해준다.
- SQL Mapper
- JDBC Template
일정관리 과제
필수
Lv 0. API 명세 및 ERD 작성 - 트러블 슈팅
사실... Spring 과제 발제 시간에 잘 이해하지 못했다.
그래서 시작부터 막막했다. 그래도 차근차근 시도하고자 한다.
아래 내용은 수정 가능성이 있지만 1차적으로 작성한 것에 의의를 둘 것이다.
API 명세
기능 | Method | URL | Request | response | 상태코드 |
일정 생성 | POST | /schedules | 요청 body | 등록 정보 | 200: 정상등록 |
전체 일정 조회 | GET | schedules | 요청 param | 다건 응답 정보 | 200: 정상조회 |
선택 일정 조회 | GET | /schedules/{scheduleId} | 요청 param | 단건 응답 정보 | 200: 정상조회 |
선택 일정 수정 | PUT | /schedules/{scheduleId} | 요청 body | 수정 정보 | 200: 정상수정 |
선택 일정 삭제 | DELETE | /schedules/{scheduleId} | 요청 param | - | 200: 정상삭제 |
scheduleId or id
이중에 고민했지만 분명하게 내용이 보이는 것이 좋을 것 같아서 위와 같이 작성했다.
ERD
createDate -> createDt -> createdAt
updateDate -> updateDt -> updatedAt
이름 하나도 고민하게 되었다.
SQL - 테이블 생성에 필요한 query
CREATE TABLE schedule
(
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '일정 식별자',
todo VARCHAR(100) NOT NULL COMMENT '할 일',
writer VARCHAR(100) NOT NULL COMMENT '작성자명',
password VARCHAR(100) NOT NULL COMMENT '비밀번호',
createdAt DATETIME COMMENT '생성일',
updatedAt DATETIME COMMENT '수정일'
);
id는 auto_increment로 하고, PK로 설정해주었다.
todo, writer, password는 not null로 설정했다.
생성일과 수정일은 직접 작성자가 입력하는 것이 아닌 자동으로 생성되는 것이므로 not null을 설정하지 않았다.
Lv 1. 일정 생성 및 조회 - 트러블 슈팅
사실 강의를 한 번 빠르게 수강했지만,
다 잘 이해 및 숙지하지 못한 상태에서
과제 구현 시도 vs 강의 복습에 대해 고민했다.
그러나 정해진 기한이 있으므로
과제를 수행하면서 강의 내용을 복습하고자 한다.
먼저 스파르타 강의에서 실습했던 내용 복습 차원에서
해당 내용을 천천히 복기하면서 과제에 맞게 구현하고자 한다.
일정 생성(일정 작성하기)
Controller
@RestController
@RequestMapping("/schedules")
public class ScheduleController {
private final ScheduleService scheduleService;
public ScheduleController(ScheduleService scheduleService) {
this.scheduleService = scheduleService;
}
}
Service를 생성자로 주입하려고 하는데 빨간 줄이 떴다.
Service 인터페이스만 만들고 구현체를 만들지 않았기 때문인 것으로 보인다.
public class ScheduleServiceImpl implements ScheduleService
구현 클래스에 implements 했는지 확인하자
작성일과 수정일에 현재 날짜와 시간 데이터 설정
작성일과 수정일에 현재 날짜와 시간 데이터를 입력해야 하는데
1) DB에서 처리할지
2) 서버에서 처리할지
고민을 했고,
튜터님께서는 JPA에서는 annotation을 통해 서버에서 설정할 수 있는 방법이 있다고 하셨다.
그러나 JDBC Templete에서는 없다고 하셨다.
그래서 아래와 같이 서버에서 처리하기로 했다.
LocalDateTime now = LocalDateTime.now();
schedule.setCreatedAt(now); // 작성일 설정
schedule.setUpdatedAt(now); // 수정일 설정
JdbcTempleteScheduleRepositoryImpl 에서
insert할 때, 현재 날짜와 시간을 setter를 통해 각각 작성일과 수정일에 설정해주기로 했다.
사실 막막하지만... 차근차근 하다보면 잘 될 거라고 믿는다.
'CODING > 스파르타 내일배움캠프 TIL' 카테고리의 다른 글
32_문자열 내림차순으로 배치하기_일정관리 과제 Lv 3 구현완료_25.1.27(월) (0) | 2025.01.27 |
---|---|
31_약수의 개수와 덧셈_일정관리 과제 Lv 1,2 구현완료_25.1.24(금) (0) | 2025.01.24 |
29_수박수박수박수박수박수?_스탠다드 Spring 3 Layered, Spring MVC_Spring 입문 4,5주차_25.1.22(수) (0) | 2025.01.22 |
28_가운데 글자 가져오기_Spring 입문_25.1.21(화) (0) | 2025.01.21 |
27_제일 작은 수 제거하기_키오스크 과제 해설_스탠다드 백엔드 개발자 필수 지식_25.1.20(월) (0) | 2025.01.20 |