스프링 347

10강. 주문할인정책 구현

public interface DiscountPolicy { int discount(Member member, int price); } public class FixDscountPolicy implements DiscountPolicy { private int discountFixAmount = 1000; @Override public int discount(Member member, int price) { if(member.getGrade()== Grade.VIP){ return discountFixAmount; }else { return 0; } } } 고정, Percent 바뀔지 모르니 인터페이스. public class Order { private Long memberId; private Stri..

6강. 회원 도메인 설계

비즈니스 요구사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있 다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정)

3강. 좋은 객체지향의 원칙 5가지, SOLID

SRP: 단일 책임 원칙(single responsibility principle) 변경이 있을때 파급이 적으면 잘 따른 것 OCP: 개방-폐쇄 원칙 (Open/closed principle) 확장에는 열려 있으나 변경에는 닫혀있어야 한다. 다형성. 사실 상 변경을 안하기는 힘들고, 대신 이 역할의 해주는, 일종의 motherboard 라고 생각하면 됨. 스프링 컨테이너가 이 역할을 해줌. LSP: 리스코프 치환 원칙 (Liskov substitution principle) 똑같은 규약을 지켜야 함. 예를 들어, 엑셀을 밟으면 앞으로 가게끔 설계한 인터페이스의 함수는, 무한히 구현 하더라도 그 방향을 따라야 함. 뒤로 가게 하거나 다른 뜬금없는 기능을 넣으면 안됨. ISP: 인터페이스 분리 원칙 (Int..

2강. 좋은 객체지향 프로그래밍이란?

객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프 트웨어 개발에 많이 사용된다. 레고블럭 다형성 마치 이런.. 부품을 갈아 끼울 수 있는.. 운전자가 자동차를 바꿔도 계속 운전을 할 수 있는 것 처럼.. 특정 부분을 다른걸 따로 새로 만든 다음에, 대신 갈아끼우기만 해도 제대로 굴러간다.. 자동차 인터페이스.. 에서 구현.. 갈아끼운다.. 이것은.. 역할과 구현으로 나누었기 때문에 가능하다.. 만드는 자는 그저 역할.. 어떤 역할만 해야 하는지 알면 된다. 어떤 행동을 하게끔 해야 하는 지.. 어떤 값을 줘야 하는 지.. 역할 = 인터페이스 구현 = 객체, 클래스 객체 설계시, 역할(인터페이스) 먼저 부여. 그 역할을 수행할 객체 구현 프로그래밍을 할 때, 각각의 역할..

21강. AOP

Aspect Oriented Programming 측면 지향 프로그래밍 공통관심사항과 핵심관심사항 분리 뭔가 좀 함수마다 공통사항? 예를들어 모든 함수의 실행시간을 측정하고 싶다거나 그런거에 쓰는 듯. 어디까지나 보조역할 @Aspect //AOP 한다는 뜻. @Component //이거 해두면 @Bean으로 따로 등록 안해도 됨. public class TimeTraceAop { @Around("execution(* hello.hellospring..*(..))") //여기서 특정함수나 클래스 지정 가능. 이거는 hello.hellospring 안의 모두 public Object execute(ProceedingJoinPoint joinPoint) throws Throwable{ long start = ..

20강. 스프링 JPA

public interface SpringDataMemberRepository extends JpaRepository, MemberRepository { //JPQL select m from Member m where m.name = ? //저 함수 이름만 보고도 이렇게 짜줌. 매개변수, 반환타입, 이름만 보고 알아서 짜주는 듯 @Override Optional findByName(String name); } 스프링 JPA는 저렇게 인터페이스로 만들어 놓고, JpaRepository , 먼저만들어놓은MemberRepository{ findByName() } 인터페이스가 인터페이스 상속받을때는 extends 이렇게 JpaRepository를 상속받으면 알아서 구현해줌. JpaRepository는 Jpa라이..

19강. JPA

코드도 줄고, 이제 쿼리도 알아서 날림. 객체 중심으로 설계, 생각 가능. build.gradle에 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 얘 추가. implementation 'org.springframework.boot:spring-boot-starter-jdbc' 이것까지 포함이라 이거는 주석처리 해도 됨. 그 다음 application.properties spring.jpa.show-sql=true 이렇게 하면 jpa가 날리는 sql 볼 수 있음. spring.jpa.hibernate.ddl-auto=none jpa는 객체를 보고 테이블을 알아서 만들어 주는데, 우리는 이미 만들어 줬으니 저거 none 해두면 ..

18강. Jdbc 템플릿

실무에서 자주 씀 public class JdbcTemplateMemberRepository implements MemberRepository{ private JdbcTemplate jdbcTemplate; @Autowired public JdbcTemplateMemberRepository(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); } @Override public Member save(Member member) { SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate); //간단 jdbc인서트. 인서트용 객체 jdbcInsert.withTableName("mem..