본문 바로가기
Spring/스프링 핵심 원리 - 기본편

2-1. 스프링 핵심 원리 이해1 - 예제 만들기(회원) + static, map, final

by hk27 2022. 1. 2.

안녕하세요. 

오늘은 섹션2 스프링 핵심 원리 이해1 - 예제 만들기를 리뷰하겠습니다. 

회원, 주문, 할인 정책을 다루는 간단한 예제를 만들어 보았습니다. 

스프링을 활용하지 않고 순수한 자바로 코드를 짰습니다.

역할과 구현을 구분하고, 요구사항이 변경되었을 때 유연한 대처가 가능하도록 하는 것이 이번 섹션의 목표입니다. 

이번 게시글에서는 회원 관련 내용을 간단히 살펴보고, 공부하면서 궁금하여 추가로 알아본 내용을 정리해보았습니다. 

 

회원 도메인 요구사항

회원이 가입할 수 있고, 가입 후에는 회원을 조회할 수 있다.
회원은 일반과 VIP 두 가지 등급이 있다.
회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)

 

회원 도메인 협력 관계(기획자와 함께 볼 수 있는 다이어그램)

 

회원 클래스 다이어그램(개발자 관점의 다이어그램)

 

 

Further Study

1. Long(Wrapper Class)

회원 엔티티를 구현한 Entity 클래스에서, 멤버 변수로 Long id를 이용합니다. 왜 long이 아닌 Long을 이용할까요?

게시글이 길어져서 이 주제를 위한 글을 새로 작성하였습니다. 

https://passionate.tistory.com/10

 

[Java] Primitive Type/Wrapper Class

안녕하세요. 오늘은 Primitive Type과 Wrapper Class에 대해 알아보겠습니다. 스프링을 공부하면서, 회원 객체를 구현한 클래스에서 멤버변수로 'Long id'를 이용하는 것을 보고 왜 long이 아닌 Long을 이용

passionate.tistory.com

 

 

2. static, Map

회원저장소 구현체인 MemoryMemberRepository 클래스에서, 

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

을 이용합니다. 

왜 static을 이용할까요? 공유하기 위해서 입니다. static을 이용하지 않으면 클래스의 객체 인스턴스가 만들어질 때마다 변수가 생성됩니다[2]. 그러나 static으로 설정하면 클래스가 메모리에 올라갈 때 변수가 생성되어서 모든 인스턴스에서 같은 곳의 메모리 주소만을 바라보기 때문에 static 변수의 값을 공유하게 됩니다. 

또한, 저장소에는 Map을 많이 이용합니다. Map은 key와 value로 구성된 객체를 저장하는 자료구조이며, key는 중복을 허용하지 않습니다. Map은 인터페이스이고, 구현체로 HashMap을 이용하였습니다.  HashMap은 Map의 대표적인 구현체 중 하나로, Hashing을 이용하여 빠른 검색을 지원합니다. 객체를 넣거나 값을 찾을 때는 put, get을 이용합니다. 

store.put(key, value) // 삽입
store.get(key) // key를 갖는 value를 찾아줌

 

3. final

멤버서비스 구현체인 MemberServiceImpl 클래스에서, 

private final MemberRepository memberRepository = new MemoryMemberRepository();

라는 코드가 나옵니다. final 키워드를 클래스 멤버 변수에 붙이면 생성자(Constructor) 호출 시 한 번만 초기화 할 수 있다는 의미로 사용됩니다. 초기화된 이후에는 읽기만 허용되며 값을 다시 설정할 수 없습니다[3]. 인스턴스 생성 시에 설정되고 바뀌지 않을 값에 final 키워드를 붙여주면 의도하지 않은 멤버 변수 변경을 막을 수 있습니다. 위의 코드에서는 memberRepository 객체를 다른 객체로 바꾸지 않기 위해 final 키워드를 붙이고 있습니다. 

 

인프런  '스프링 핵심 원리 - 기본편' 강의를 듣고 공부하며 정리한 자료입니다. 

잘못된 부분은 피드백 주시면 감사하겠습니다. 

글 읽어주셔서 감사합니다 :-)

 

참고자료
[1] 스프링 핵심 원리 - 기본편, 스프링 핵심 원리 이해1 - 예제 만들기 https://www.inflearn.com/course/스프링-핵심-원리-기본편

[2] https://wikidocs.net/228

[3] https://soft.plusblog.co.kr/2

 

 

댓글