inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 기본편

관심사의 분리

OrderApp의 orderService와 memberService 내의 MemberRepository가 독립된 오브젝트가 아닌가요?

232

이기적인 개발자

작성한 질문수 5

0

안녕하세요.

강의를 듣던 중, 코드를 그대로 따라했는데 OrderApp에서 MemberNullPointerException이 나와서 추적하던 중, 주문서비스와 회원서비스의 레퍼지토리가 따로따로인 것 같아서 생기는 오류라고 추측되어 질문드립니다 !

Me

public class AppConfig {

    public MemberService memberService(){
        return new MemberServiceImpl(new MemoryMemberRepository());
    }

    public OrderService orderService(){
        return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy());
    }

}

상단은 AppConfig입니다.

각 회원 서비스와 멤버 서비스의 매개변수에는 new MemoryMemberRepository()로 되어있는데.. 각 새로운 인스턴스를 생성해서 생기는 오류인 것 같아서요. 

public class OrderApp {
    public static void main(String[] args) {

        AppConfig appConfig = new AppConfig();
        MemberService memberService = appConfig.memberService();
        OrderService orderService =  appConfig.orderService();

        long memberId = 1L;
        Member member = new Member(memberId, "memberA", Grade.VIP);
        memberService.join(member);

        Member findMember = memberService.findMember(1L);
        System.out.println("new Member = " + member.getName());
        System.out.println("find Member = " + findMember.getName());
        System.out.println("find Member id = " + findMember.getId());
        
//        Order order = orderService.createOrder(memberId, "itemA", 10000);
//
//        System.out.println("order = " + order);
    }
}

상단의 memberService 내의 findMember(1L)를 확인하기 위해 OrderApp을 돌려보면 findMember의 값이 잘 나옵니다. 그런데, orderService 내의 memberRepository를 참조하면 nullPointerException 오류가 납니다. 각 다른 저장소라 그런 것으로 보이는데 강의에서는 잘 돌아가는게 제가 모르는 부분이 어떤건지 싶네요..(제 환경에서는 돌아가지 않고 pdf를 그대로 복사붙여넣기 했는데 왜 그런가 싶네요.)

spring oop

답변 2

3

이기적인 개발자

해결 되었습니다 ..! ㅠ

다른 수강생과 같은 이유였군요.

혹시나 같은 문제이신 분 있으실까봐 도움 되시라고 올립니다 !

hello.core.member.MemoryMemberRepository;

의 Hash Map이 static인지 보시면 될 것 같아요.

정적 변수이기에 데이터를 서로 공유가 가능하며, 위의 질문에 대한 문제가 해결 됩니다 !

private static Map<Long, Member> store = new HashMap<>();

0

김영한

잘 해결하셨습니다^^

구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?

0

47

2

MemberService의 인터페이스를 왜 사용하는지 궁금합니다.

0

72

1

롬복 @Setter를 써야 하는 상황이 있는건가요?

0

87

1

빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?

0

79

1

테스트 속도가 나중에 영향이 있을까요?

0

75

1

gradle 설정 안떠서 질문 남깁니다!

0

116

2

build.gradle로 프로젝트를 여는 이유

0

81

1

provider 사용하는 이유

0

85

1

다음 강의 뭘 들어야 할까요

0

123

2

프로토타입 빈, 직접 destroy 호출 안 할 경우

0

62

1

beanB

0

79

2

퀴즈다시풀기

0

63

1

Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ

0

90

2

"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.

0

63

3

run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>

0

102

2

도메인의 정의?

0

57

1

ApplicationContext 질문입니다.

0

60

1

@Scope의 proxyMode를 사용할때 단위 테스트 방법

0

86

2

ai api 선정하기 관련 질문

0

115

2

생성자 자동주입 관련해서

0

60

1

생성자 직접 호출 vs 팩토리 메서드 패턴

0

93

2

Spring에서 SessionScope와 RequestScope는 함께 사용되나요?

1

63

1

12:25

0

74

2

appConfig.xml 오류

0

124

1