스프링 실습1

이정연·2023년 2월 13일
0

예제

목록 보기
1/2

Member

  • 기본적인 member에 대한 정보가 들어감
  • 수정도 해야 하기 때문에 각 항목별로 Getter, Setter가 필요함.
public class Member {
    private Long memberId;
    private String email;
    private String name;
    private String phone;

    public Member(Long memberId, String email, String name, String phone){
        this.memberId = memberId;
        this.email = email;
        this.name = name;
        this.phone = phone;
    }

    public Long getMemberId(){
        return memberId;
    }

    public void setMemberId(Long memberId){
        this.memberId = memberId;
    }
    ----------------------------------------------
    public String getEmail(){ 
    	return email; 
    }

    public void setEmail(String email){
        this.email = email;
    }
	-----------------------------------------------
    public String getName(){
        return name;
    }

    public void setName(String name){
        this.name = name;
    }
	-----------------------------------------------
    public String getPhone(){
        return phone;
    }

    public void setPhone(String phone){
        this.phone = phone;
    }
}

항목별로 다 get, set 정의를 해준다.

MemberRepository

  • Service에서 값을 불러올 때 이용
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;


@Component
public class MemberRepository {
    private static Map<Long, Member> members = new HashMap<>();

    public void postMember(Member member){
        members.put(member.getMemberId(), member); //역시 리턴값이 없다. 그냥 Map에 넣어준다. (ID, 멤버 이름)으로 구분
    }

    public Member getMember(Long memberId){
        return members.get(memberId);  // 위에 저장된 ID를 불러온다.
    }

    public void deleteMember(Long memberId){
        members.remove(memberId);
    }

}

@Component 에너테이션을 붙이면 앞으로 이 리소스가 @ComponentScan에 의해 Bean으로 이용된다는 말임. 따라서 일일히 Bean 지정을 안해줘도 최상위에 @Component 만해줘도 됨

MemberService

  • Test와 직접적으로 연결
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

@Component
public class MemberService {
    private final MemberRepository memberRepository;

    @Autowired
    public MemberService(MemberRepository memberRepository){
        this.memberRepository = memberRepository;
    }

    public void createMember(Member member){
        memberRepository.postMember(member); // 리턴값을 보여줄 필요 없음. 등록된거만 알려주면 됨.
    }

    public Member getMember(Long memberId){
        return memberRepository.getMember(memberId); //리턴값을 꼭보여줘야함
    }

    public void deleteMember(Long memberId){
        memberRepository.deleteMember(memberId);
    }
}

역시 @Comppnent가 붙어 있음.
@ComponentScan & @Component만 사용했을 때에 DependencyConfig에 어떤 의존 객체를 주입할지 명시해주지 않기 때문에 의존 주입이 필요한 생성자 부분에 @Autowired를 통해 의존 관계 주입이 필요합니다.

MemberTest

  • 요청사항을 실행함
import com.example.section2week4.DependencyConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MemberTest {
    public static void main(String[] args) {
        ApplicationContext ac = new AnnotationConfigApplicationContext(DependencyConfig.class);
        MemberService memberService = ac.getBean("memberService", MemberService.class);
        //이코드로 인해 클라이언트는 DependencyConfig에만 집중하면된다. 결국 그코드가 어떤것인지는 몰라도
        //config 파일에서 알아서 다 조정을 해준다고 볼 수 있다.

        Member member = new Member(0L, "dlwjddus16@naver.com", "Kimcoding", "010-4152-6543");
        memberService.createMember(member);
        // 정의를 내려준 대로 리소스를 한번에 등록한다.

        Member currentMember = memberService.getMember(0L);
		// 현재멤버를 조회할 카테고리를 만든다.
        
        System.out.println("회원 가입한 유저 : " + member.getName());
        System.out.println("현재 첫번째 유저 : " + currentMember.getName());
		// Member의 getName 메서드를 불러온다.
        
        
        if(member.getName().equals(currentMember.getName())){
            System.out.println("새롭게 가입한 사용자와 현재 사용자가 같습니다.");
        }
        memberService.deleteMember(0L);
        if(memberService.getMember(0L) == null){
            System.out.println("회원 삭제가 정상적으로 완료되었습니다.");
        }
    }
}

ApplicationContext로 스프링 컨테이너를 형성하고 ac라고 이름을 붙여준다.
그것을 MemberService에서 ac.getBean으로 호출하여 memberService를 이용한다.

DependencyConfig

  • 유지보수를 유연하게 하기위해 클래스하나를 새로만들어 조정해준다.
  • 애플리케이션 입장에서는 단순히 DependencyConfig만 집중하면된다.
@Configuration
@ComponentScan
public class DependencyConfig {
    
}

@ComponentScan만 설정해주더라도 정상작동됨을 알 수 있다. 이는 ComponentScan이 모든 @Component를 읽어와서 적용시키기 때문이다.

전체적인 흐름을 살펴보면 MemberTest 에서 명령을 내려주면 그것을 MemberService에서 1차적으로 받아 실행한다.
MemberService 는 MemberRepository와 연결되어있고, MemberRepository는 Member정보와 연결되어있다.
계단식으로 하나하나 안쪽으로 들어가는 구조이며, 대부분의 데이터를 구분할때 파라미터로 memberId를 이용함을 알 수 있다.

profile
반갑습니다.

0개의 댓글