회원 도메인 실행과 테스트 강의 8분 40초 질문입니다.
302
작성한 질문수 192
스프링 핵심 원리 이해1 - 예제 만들기 질문입니다.
회원 도메인 실행과 테스트 강의 8분 40초에 memorymemberrepository가 추상화에도 의존하고 구체화에도 의존한다는게 무슨뜻인가요?
2.주문과 할인 도메인 개발 7분
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository=new MemoryMemberRepository();
private final DiscountPolicy discountPolicy=new FixDiscountPolicy();자바를 배울 때
private final MemberRepository memberRepository=new memberRepository();
이런식으로 객체도 같은 이름으로 생성해서 항상 그런줄알았는데 왜 memberRepository() 이게 아니라 MemoryMemberRepository() 이런식으로 되는건가요?
implements와 extends차이점이 뭔가요? https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4 여기서는
class가 class를 상속받을 땐 extends를 사용하고, interface가 interface를 상속 받을 땐 extends를 사용한다. 이렇게나와있는데 이게 맞는거아요?
주문과 할인 도메인 실행과 테스트 1분
public class OrderApp { public static void main(String[] args) {
MemberService memberService = new MemberServiceImpl();
OrderService orderService = new OrderServiceImpl();
long memberId = 1L;
Member member = new Member(memberId, "memberA", Grade.VIP);
memberService.join(member);
Order order = orderService.createOrder(memberId, "itemA", 10000); System.out.println("order = " + order); } }
Long memberId=1L 여기서 1리터가 무슨 뜻인가요?
public class Member {
private Long id;
private String name;
private Grade grade;
Member클래스에 grade로 변수 선언했는데요. grade가 소문자가 아닌 Grade.VIP 대문자로 되어있는데 왜이러는건가요?
답변 1
0
안녕하세요. ekek님, 공식 서포터즈 코즈위버입니다.
1,2,3,4 질문에 답을 드리기 위해선 다형성과 상속 개념을 설명드리면 될 것 같아요.
어떤 학급에 '철수'라는 객체가 있습니다. 또 '영희'라는 객체도 있습니다. 철수와 영희는 서로 다른 객체입니다. 그런데 이 둘을 하나의 개념으로 묶을 수 있어요. 가령 '학생' 이라고 하면 철수와 영희 모두 해당하죠. '철수는 철수이다 또한 철수는 학생이다' 그러니 철수는 철수라 할 수 있고 또 학생이라고 할 수 있다. 이런 개념을 다형성이라 합니다. '추상화'라고 이해하시면 될 것 같아요. 학생을 모두 아우르는 개념(추상화)은 '사람' 이 올 수 있습니다.
이런 추상화를 자바에서는 상속 혹은 구현(implements)으로 표기할 수 있습니다. '모든 학생은 사람이다'는 다음과 같이 표현합니다.
class Student extends Person {
... code ...
}
Person 철수 = new Student();
이제 자바에서는 Student 객체를 Student 로 사용할 수도 있고 Person으로 사용할 수도 있습니다. 하지만 약간의 제한은 있습니다. 이런 제한이 생기는 이유는 '모든 학생은 사람이다'를 만족하지만 '모든 사람은 학생이다'를 만족하지 않는 것과 마찬가지 입니다. A extends B 관계일 때 A를 자식, B를 부모 라고 하는데, 자식객체는 부모 객체의 모든 속성을 이용할 수 있으나 부모 객체는 자식 객체의 값을 모두 제어할 수는 없습니다.
자바는 클래스 상속을 딱 한개로 제한하고 있는데요. 때로는 2~3개 이상의 부모를 가져야만 하는 경우도 있습니다. 이럴 때 유연성을 제공하기 위해 인터페이스(Interface)를 제공합니다. 인터페이스는 갯수에 제한 없이 구현(implements)할 수 있지요. (클래스와 클래스, 인터페이스와 인터페이스 상속은 상속이라 표현하고, 클래스와 인터페이스 간 상속은 구현이라 합니다)
숫자가 Long타입임을 알리기 위한 표기라고 보시면 됩니다. 가령 숫자뒤에 아무값도 없는 경우 자바는 기본적으로 이 값을 Integer 로 해석하려 합니다. 그러나 123L 처럼 뒤에 L이 붙은 경우 Long 값으로 해석하지요.
감사합니다.
코드 자료
0
50
2
구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?
0
56
2
MemberService의 인터페이스를 왜 사용하는지 궁금합니다.
0
76
1
롬복 @Setter를 써야 하는 상황이 있는건가요?
0
92
1
빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?
0
81
1
테스트 속도가 나중에 영향이 있을까요?
0
77
1
gradle 설정 안떠서 질문 남깁니다!
0
122
2
build.gradle로 프로젝트를 여는 이유
0
87
1
provider 사용하는 이유
0
90
1
다음 강의 뭘 들어야 할까요
0
126
2
프로토타입 빈, 직접 destroy 호출 안 할 경우
0
66
1
beanB
0
82
2
퀴즈다시풀기
0
69
1
Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ
0
92
2
"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.
0
67
3
run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>
0
106
2
도메인의 정의?
0
59
1
ApplicationContext 질문입니다.
0
63
1
@Scope의 proxyMode를 사용할때 단위 테스트 방법
0
90
2
ai api 선정하기 관련 질문
0
118
2
생성자 자동주입 관련해서
0
66
1
생성자 직접 호출 vs 팩토리 메서드 패턴
0
97
2
Spring에서 SessionScope와 RequestScope는 함께 사용되나요?
1
66
1
12:25
0
79
2





