https://start.spring.io/
main-> java ->hellospring.Application ->run클릭
세팅 gradle -> inteliJ로 변경
HelloController 에 쓴거
return 부분은 resources->templates->hello.html 을 알아서 찾아서
실행시켜줌
@RequestParam은 뭐지
url 에서 뒤부분에 ?name=뭐시기 하면
인자를 받을 때 name이 뭐시기로 옴
DI 의존성주입 (두 가지 방법)
1. 어노테이션 이용
MemberService에서 기능개발하고
MemberController만들 때
생성자에 @Autowired로 서비스와 연결을 해주어야함
그것이 가능하려면 서비스에도 @Service 를 해줘야함
근데 Service도 Repository를 참조하고 있으므로
똑같이 Repository 가서 클래스 최상단에 @Repository해주고
Service가서 서비스의 생성자에도 @Autowired해줘야함
(스프링 빈 등록이미지 참고)
2. SpringConfig 파일 따로생성 해서 java코드로 직접 빈 등록
나중에 DB연결할 때 수정할 부분이 매우적다는 장점
추후에 자세히 다룰예정
Jdbc
SpringConfig 에서
레포지토리 부분만 바꿔주면됨 뭐로?
자바코드로 짠 jdbc 로
DB에는 트랙재션이라는 개념이 있다
insert를 해도 commit을 하기전에는 반영이 안되는
테스트는 반복이 되어야한다
테스트를 할 때 insert잔뜩해서 테스트하고 롤백하면
DB에는 반영이 안되는
@Transcational
생성자가 한개일때 @Autowired 생략가능
JPA
sql query을 자동으로 처리해줌
MemoryMemberRepository에서 객체를 넣듯이 jpa에 집어넣으면 jpa가 중간에서 db에
sql날려줌
(setting) build.gradle에 가서
implementation 'org.springframework.boot:spring-boot-starter-data-jpa 추가
그리고 appilication.properties에서
spring.jpa.hibernate.ddl-auto=none 해줌
spring.jpa.hibernate.ddl-auto=create하면 DB테이블까지 다 만들어줌
jpa는
ORM object relational mapping
객체와 relational DB를 mapping한다는 뜻 by어노테이션
스프링데이터jpa는 기본적인 CRUD메소드를 지원한다
member controller
맴버 서비스 의존
얘가 멤버서비스를 가져다가 써야함
멤버 컨트롤러가 멤버서비스를 가져다가 써야함
다른 여러컨트롤러가 멤버서비스를 써야함
주문컨트롤러가 멤버서비스를 쓸수도있잖아
멤버컨트롤
스프링은 좋은객체지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크
좋은 객체지향프로그래밍이란?
객체지향
다형성
세상을 역할과 구현으로 구분하면 유현해지고 변경도 편리해진다
자동차가 바뀌어도 운전자는 새로운걸 배우지않아도 된다
자바 언어의 다형성을 활용
역할=인터페이스
구현= 인터페이스를 구현한 클래스
자바언어는 다형성을 오버라이딩으로 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용)
내가 이해한 바로는 인터페이스(틀)을 만들고
그 틀을 이용해서 여러가지 객체를 만들고 응용하는느낌
스프링은 다형성을 극대화해서 이용할수있게 도와줌
좋은 객체지향을 위한 5가지 원칙
SRP: 단일책임원칙
한 클래스는 하나의 책임만 가져야 한다
변경사항이 있을 때 하나의 클래스의 어떤 부분만 수정하면 되는것은
단일책임원칙을 잘 지킨다고 할 수 있음
OCP 개방-폐쇄 원칙
코드의 변경없이 기능추가?
확장을 하려면 기존코드 수정?
인터페이스를 구현한 새로운 클래스를 만드는것은 기존코드에 변경을 주는것이 아님
즉 확장에는 열려있으나 변경에는 닫혀있는셈
LSP리스코프 치환원칙
자동차 인터페이스가 있다
엑셀이라는 기능을 구현해야함
엑셀은 앞으로 가라는 규약이 있을텐데 뒤로가도록 만들면 LSP위반
ISP 인터페이스 분리원칙
인터페이스를 적당한 크기로 여러개로 분리하는것이 좋다
인터페이스가 명확해지고 대체가 가능해진다
DIP 의존관계 역전원칙
구현클래스에 의존하지 말고 인터페이스에 의존하라
객체 지향의 핵심은 다형성
하지만 다형성만으로는 OCP,DIP를 지킬 수 없다
뭔가 더 필요하다