💻 Spring 개발 절차
- 이동하고자 하는 html로 갈 때 쿼리 기능이 필요한지 판단!
- 쿼리 작성(mapper.xml)
- 작성한 쿼리를 실행시킬 메소드를 인터페이스에서 정의
- 인터페이스를 구현한 클래스에서 메소드를 구현
- controller의 메소드에서 쿼리 실행을 위해 만든 메소드를 호출
💻 좋은 개발 코드란?
"결합도는 낮고 응집도는 높은 코드"
- 결합도(Coupling)
- 외부 코드와의 연관도, 코드간의 상호 의존성을 나타내는 정도.
- 코드간의 관련성을 측정하는 척도.
- 한 코드의 내용을 변경하더라도 다른 코드에는 영향을 미치지 않는 상태.
- 응집도(Cohesion)
- 독립성을 나타내는 개념. 내부 구성요소간 연관 정도.
- '하나의 코드는 하나의 기능을 수행'하는 것을 의미함.
➡️ 코드의 모든 기능이 단일한 목적을 위해 수행
📌 결합도를 낮추기 위해 적용한 개념
- IOC(Inversion Of Control): 제어의 역전(객체를 만드는 주체가 역전)
- DI(Dependency Injection): 의존성 주입
📌 응집도를 높이기 위해 적용한 개념
- AOP(Aspected-Oriented Programmin): 관점지향 프로그래밍
💻 어떻게 스프링이 객체를 만들게 코드를 구현하는가?
- 스프링이 객체를 알아서 생성하려면 객체 생성이 필요한 클래스는 반드시 프로젝트의 기본 패키지 안에 생성해야 함.
- 기본 패키지 안에 생성된 클래스들을 둘러보면서 특정 어노테이션이 붙어있는 클래스들의 객체를 자동으로 생성.
➡️ 클래스 위에 선언되어서 객체를 자동으로 생성하는 어노테이션
- @Component
- @Controller
- @Service
- @Repository
(예제)
@Controller
public class StuController{}
-> StuController stuController = new StuController;
//
@Service
public StuServiceImpl{}
-> StuServiceImpl stuServiceImpl = new StuServiceImpl();
//
@Service("stuService")
public StuServiceImpl{}
-> StuServiceImpl stuService = new StuServiceImpl();
- 스프링이 자동으로 만들어준 객체를 우리가 어떻게 사용할 수 있는가?
➡️ (DI)
- 스프링이 자동으로 만들어준 객체를 사용할 때도 어노테이션으로 사용!
- 만들어진 객체를 사용하는 어노테이션
- @Autowired: 자료형을 기준으로 객체에 의존성 주입!
- @Resource: 객체명을 기준으로 객체에 의존성 주입!
ex1>---------------------------------------------------------------
@Component
class Aaa{} -> Aaa aaa = new Aaa();
//
@Component
class Bbb{} -> Bbb bbb = new Bbb();
class Test{
@Autowired
private Aaa myAaa; -> private Aaa myAaa = aaa;
}
ex2>---------------------------------------------------------------
class Aaa{}
@Component
class Bbb extends Aaa{} -> Bbb bbb = new Bbb();
//
@Contonenet
class Ccc extends Aaa{} -> Ccc ccc = new Ccc();
//
@Contonenet
class Ddd{} -> Ddd ddd = new Ddd();
class Eee{
@Resource(name = "bbb") -> bbb라는 이름의 객체로 의존성 주입!
private Aaa aaa;
-> private Aaa aaa = bbb;
}