[능력 단위 평가]
Spring에서 모듈 간 결합도를 낮추기 위해 구체 클래스 대신 ( ① )에 의존하도록 설계하며, 의존 객체를 외부에서 주입받는 방식을 ( ② )(이)라고 한다.
인터페이스
의존성주입
( ① ) → ( ② ) → Repository
각 계층의 역할: ①은 HTTP 요청을 받고, ②는 비즈니스 로직을 처리한다.
@Controller
@Service
DB 접근 계층 클래스에 붙이는 어노테이션: ( ① )
비즈니스 로직 계층 클래스에 붙이는 어노테이션: ( ② )
@Repository
@Service
@Controller
public class MemberController {
private final MemberRepository memberRepository;
public MemberController(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@GetMapping("/")
public String index(Model model) {
model.addAttribute("members", memberRepository.findAll());
return "index";
}
}
@Controller
public class MemberController {
private final MemberService memberService;
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
@GetMapping("/")
public String index(Model model) {
model.addAttribute("members", memberService.findMembers());
return "index";
}
}
① 결합도는 높을수록, 응집도는 낮을수록 좋다
② 결합도는 낮을수록, 응집도는 높을수록 좋다
③ 결합도와 응집도 모두 높을수록 좋다
④ 결합도와 응집도 모두 낮을수록 좋다
② 결합도는 낮을수록, 응집도는 높을수록 좋다
인터페이스와 구현을 분리해서, 데이터베이스가 바뀌더라도 핵심 코드를 수정하지 않고 유연하게 변경할 수 있습니다.
조건:
1) 패키지: com.example.member
2) 필드: id (int), name (String), email (String)
3) 기본 생성자, 전체 필드 생성자 포함
4) 모든 필드의 Getter / Setter 포함
package com.example.member;
public class Member {
private int id;
private String name;
private String email;
public Member() {
}
public Member(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}