자바당 정파 기술 EJB(Enterprise Java Beans)
-장점: 기술적으로 좋음
-단점: 비쌈 / 복잡함 / 느림 / EJB에 의존적 (EJB지옥)
-> POJO(Plain Old JAVA OBJECT) 라는 말도 나옴
EJB엔티티빈 -> Hibernate -> JPA
-표준 인터페이스 : JPA
-구현체들 : 하이버네이트 / EclipseLink / 기타
1. 스프링의 생태계
2. 스프링 프레임워크
3. 스프링부트
스프링부트는 스프링프레임워크의 여러 기능을 편리하게 사용할 수 있도록 제공하는것임
스프링프레임워크를 제외하고 쓸수 는 없음
4. 스프링 단어?
5. 핵심개념
<오답>
- 웹 어플리케이션 만들고, DB접근 편리하게 해주는 기술?
- 전자정부 프레임워크?
- 웹 서버도 자동으로 띄워주고?
- 클라우드? 마이크로서비스?
<진짜 핵심>
- 스프링은 자바 언어 기반의 프레임워크
- 자바 언어의 가장 큰 특징 - 객체 지향 언어
- 스프링은 객체지향언어가 가진 강력한 틍징을 살려내는 프레임워크
- 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임 워크
1. 객체 지향 특징
2. 객체 지향 프로그래밍
3. 유연하고, 변경이 용이?
4. 다형성(polymorphism)
-> 자동차가 바뀌어도 자동차의 역할은 그대로이기에, 운전자가 자동차를 운전할 수 있음
-> 운전자가 쉽게 사용하기 위함
-> 운전자(클라이언트)가 자동차의 내부구조에 대해 알 필요 없음
{*}역할과 구현을 분리
- 역할과 구현으로 구분하면 세상이 단순해지고, 유연해지며, 변경도 편리해진다
- 장점
클라이언트는 대상의 역할(인터페이스)만 알면 된다
클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
클라이언트는 구현 대상의 내부구조가 변경되어도 영향을 받지 않는다
클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.- 자바언어
자바 언어의 다형성을 활용
--역할 : 인터페이스
--구현 : 인터페이스를 구현할 클래스, 구현객체
객체를 설계할 떄 역할과 구현을 명확히 분리
객체 설계 시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기
객체의 협력이라는 '관계'부터 생각
-> 혼자 있는 객체는 없다
-> 클라이언트 : 요청, 서버: 응답
-> 수많은 객체 클라이언트와 객체서버는 관계를 가진다.
자바 언어의 다형성
-> 오버라이딩 된 메서드가 실행
-> 다형성으로 인터페이스를 구현한 객체를 실행 시점에 유연하게 변경할 수 있다.
-> 물론 클래스 상속 관계도 다형성, 오버라이딩 적용 가능
(부모는 마음이 넓어서 자식 타입을 다 받을 수 있다 ㅋ)
(자식은 부모마음을 몰라서 받을 수 없다 ㅋㅋ)
- 다형성의 본질
->인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
-> 다형성의 본질을 이해하려면 협력 이라는 객체사이의 관계에서 시작해야함
-> 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.
한계
-> 역할(인터페이스) 자체가 변하면, 클라이언트, 서버 모두에 큰 변경이 발생한다.
--> 인터페이스를 안정적으로 잘 설계하는 것이 중요
5. 스프링과 객체 지향