목적
- 우선 프레임워크가 왜 개발에 필요한지 부터 생각해봐야합니다.
- 개개인의 실력 차이가 크더라도, 항상 만족할만한 일정 수준 이상의 결과물이 나온다면,
- '생산성' 이 증가합니다.
- Spring Framwork도 이 생산성을 위해 개발되었습니다.
- 특정한 틀이 있고, 거기에 Application을 구현하는 개발자는 살을 더해나간다고 보면 됩니다.
- 개발자들이 손쉽게 개발을 할 수 있도록 도와주지만,
- 그만큼 개발자의 자유가 제한됩니다.(스프링의 내부단은 건드리기가 힘들다..)
특징
- 구조를 통일해줍니다.
- 하드웨어적인 구성이 필요 없는 경량화 된 프레임워크입니다.
- POJO(오래된 방식의 자바 오브젝트)를 자바 EE에 의존적이지 않게 해줍니다.(일반적인 자바EE는 특정한 인터페이스를 구현하거나, 상속을 받아야하지만, 그럴 필요가 없다는 뜻..?)
- 개발자에게 가이드라인을 제공해줍니다.
- 다양한 도구가 제공됩니다.
- 제어 역행(IoC)기술을 통해 애플리케이션 간 종속성을 느슨하게 해줍니다.(컨트롤의 제어권이 사용자가 아니라 프레임워크에 있고, 필요에 따라 이를 호출한다는 내용..)
- 또한 종속성이 강하면, 그만큼 사이드이펙트가 많아지므로, 개발자들에게 종속성을 제거한다는 것은 굉장히 중요한 내용
- 관점 지향 프로그래밍(AOP)이 가능하다. 다시 말해, 특정 기능을 가진 클래스에는 핵심이 되는 것만 포함시키고, 이로부터 파생되어 나오는 내용들은 따로 정리할 수 있다.
- 구체적으로 로그 출력, 예외처리 등 공통화 할 수 있는 것들을 Aspect라는 단위로 모으는것.
- 아래는 AOP에 대한 위키백과의 예제...
- 은행 어플리케이션의 송금 기능을 생각해 보았을 때..
void transfer(Account fromAcc, Account toAcc, int amount) throws Exception {
if (fromAcc.getBalance() < amount)
throw new InsufficientFundsException();
fromAcc.withdraw(amount);
toAcc.deposit(amount);
}
여기에 로그 기록 기능, 보안 검사 기능, 데이터 손실 방지 기능을 추가하고싶다..!
Logger logger, Database database) throws Exception {
logger.info("Transferring money...");
if (!isUserAuthorised(user, fromAcc)) {
logger.info("User has no permission.");
throw new UnauthorisedUserException();
}
if (fromAcc.getBalance() < amount) {
logger.info("Insufficient funds.");
throw new InsufficientFundsException();
}
fromAcc.withdraw(amount);
toAcc.deposit(amount);
database.commitChanges(); // Atomic operation.
logger.info("Transaction successful.");
}
- 이렇게 변경하려면 상당한 작업 시간이 소요된다.. 그래서 AOP는 Aspect라는 단위로 독립적 모듈로 표현할 수 있게 해준다.
- 아래는 로깅 기능을 만든 것..
void Bank.transfer(Account fromAcc, Account toAcc, int amount, User user, Logger logger) {
logger.info("Transferring money...");
}
void Bank.getMoneyBack(User user, int transactionId, Logger logger) {
logger.info("User requested money back.");
}
// Other crosscutting code.
}
- 또한 의존성을 주입시킨다(DI : Dependency Injection)..?(종속성은 없애고자하면서 의존성은 주입시킨다?)
- 종속성과 의존성은 다른 내용이다. 의존성을 '주입'한다면, 종속성이 느슨해진다..
- 공부를 하면 할수록 어렵네용 Spring은...
- 이러한 개념이 뭐가 중요하겠습니까....
- 갑이 원하는 기능만 잘 만들면 되는것 아니겠습니까ㅎㅎ..
- 라고 생각한다면 평생 을로 살수밖에 없습니다.
- 개념을 잘 알고 일한다면, 갑이 될 수 있다!
- 마무리가 이상하네요.
'Dev > [Java]' 카테고리의 다른 글
[JAVA] 5. 인터페이스, static, final, abstract (0) | 2021.01.20 |
---|---|
[JAVA] 4. Polymorphism 다형성 (0) | 2021.01.19 |
[JAVA] 3. ObjectOrientedProgramming(OOP), 예외처리 (0) | 2021.01.19 |
[JAVA] 2. 데이터타입, 접근제한자, 제어문, 롬복 (0) | 2021.01.18 |
[JAVA] 1. 자바 기초(JDK, JRE 차이) (0) | 2021.01.18 |