좋은 코드와 Controller분리
- 좋은 코드는 왜 중요한가?
- Controller 3단 분리하기 Service, Repository
좋은 코드와 Controller분리
- 좋은 코드는 왜 중요한가?
- Controller 3단 분리하기 Service, Repository
좋은 코드는 왜 중요한가?
코드만 보고도 어떠한 기능을 하는지 알 수 있도록 해야지 협업을 하는데 있어서나 시간을 절약할 수 있다
않좋은 코드가 쌓일수록 생산성 떨어짐
하나의 클래스에 여러가지 동작이 있다면?
- 그 함수를 여러 명이 동시에 수정할 수 없다,
- 그 함수를 읽고, 이해하는 것이 너무 어렵다
- 함수의 어느 부분을 수정하더라도 함수 전체에 영향을 미칠 수 있어 수정이 어렵다
- 너무 큰 기능이어서 테스트 하기 힘들다
-> 유지보수성이 떨어진다
Clean code
함수는 최대한 작고 한 가지 일만 수행하는 것이 좋다
클래스는 작아야 하며 하나의 책임만을 가져야 한다
Controller 3단 분리하기 Service, Repository
Controller의 기존 역할
1. API의 진입 지점으로 HTTP Body를 객체로 변환 -> Controller
2. 현재 유저가 있는지, 없는지 등을 확인하고 예외 처리 -> Service
3. SQL을 사용해 실제 DB와의 통신을 담당 -> Repository
Repository -> Service사용 -> Controller사용
이러한 구조를 Layered Architecture라 한다
의문점
Controller에서는 JdbcTemplate을 가져오는데 어디에서 가지고 오는건가?
문제
- 코드 더 좋은 코드로 고치기
기존 코드
public class Main {
public static void main(String[] args) {
System.out.print("반복 횟수를 입력해 주세요 : ");
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int d1 = 0, d2 = 0, d3 = 0, d4 = 0, d5 = 0, d6 = 0;
for (int i = 0; i < a; i++) {
int b = (int) (Math.random() * 6);
if (b >= 0 && b < 1) {
d1++;
} else if (b >= 1 && b < 2) {
System.out.println(b);
d2++;
} else if (b >= 2 && b < 3) {
System.out.println(b);
d3++;
} else if (b >= 3 && b < 4) {
System.out.println(b);
d4++;
} else if (b >= 4 && b < 5) {
System.out.println(b);
d5++;
} else if (b >= 5 && b < 6) {
System.out.println(b);
d6++;
}
}
// 결과 출력
System.out.printf("1은 %d번 나왔습니다.\n", d1);
System.out.printf("2는 %d번 나왔습니다.\n", d2);
System.out.printf("3은 %d번 나왔습니다.\n", d3);
System.out.printf("4는 %d번 나왔습니다.\n", d4);
System.out.printf("5는 %d번 나왔습니다.\n", d5);
System.out.printf("6은 %d번 나왔습니다.\n", d6);
}
}
고친 코드
public class Main {
static final int NUMBERS_RANGE = 6;
public static void main(String[] args) {
System.out.print("반복 횟수를 입력해 주세요 : ");
Scanner sc = new Scanner(System.in);
int TryNumber = sc.nextInt();
int number_cnt[] = new int[TryNumber];
for (int i = 0; i < number_cnt.length; i++) {
int dice = (int) (Math.random() * NUMBERS_RANGE);
number_cnt[dice]++;
}
// 결과 출력
for (int i = 0; i < NUMBERS_RANGE; i++) {
System.out.println(i + 1 + " 은(는) " + number_cnt[i] + "번 나왔습니다.");
}
}
}
출처
'TIL > 자바와 스프링부트로 서버까지 배포하기' 카테고리의 다른 글
6일차 UserController와 스프링 컨테이너 (1) | 2024.02.26 |
---|---|
인프런 워밍업 스터디 클럽 0기 BE - 1주차 발자국 (0) | 2024.02.25 |
4일차 유저API와 삭제API다루기 (0) | 2024.02.22 |
3일차 MySQL과 데이터베이스 (0) | 2024.02.21 |
2일차 유저API와 POST API (0) | 2024.02.20 |