인터페이스 변수에 구현 객체 대입

Hyun·2023년 7월 11일
0

자바 문법

목록 보기
8/8

인터페이스도 하나의 타입이므로 변수의 타입으로 사용할 수 있다. 인터페이스를 통해 구현 객체를 사용하려면, 인터페이스 변수에 구현 객체를 대입해야 한다. 정확히 말하면 구현 객체의 번지를 대입해야 한다.

인터페이스 변수에 구현 객체가 대입이 되었다면 인터페이스 변수를 통해 인터페이스의 추상 메서드를 호출할 수 있게 된다.

예)
MemberService 클래스에서 인터페이스인 MemberRepository 의 변수를 이용해 MemberRepository 의 추상 메서드를 호출하려 할때, MemberRepository 인터페이스를 상속하는 서로 다른 구현 객체를 하나의 MemberRepository 인터페이스 변수에 바꿔낄 수 있다.

MemberService.java

public class MemberService {

    private final MemberRepository memberRepository;

    //인터페이스 변수에 해당 인터페이스를 상속하는 구현객체를 대입할 수 있다. 이렇게 하면 인터페이스 변수로 인터페이스의 추상 메서드를 호출할 수 있게된다.
    public MemberService(MemberRepository memberRepository){//외부에서 넣어주도록 설정함
        this.memberRepository = memberRepository;
    }

    /* 회원 가입 */
    public Long join(Member member){
        //같은 이름이 있는 중복 회원X
        validateDuplicateMember(member);//중복 회원 검증

        memberRepository.save(member);//db(static)에 저장됨
        return member.getId();
    }
    ...

SpringConfig.java
MemberService 객체 생성할때를 DI를 이용해 인자로 MemporyRepository 인터페이스 변수를 넣어줄 때, MemoryMemberRepository 와 JdbcMemberRepository 구현 객체를 대입할 수 있다.

MemoryMemberRepository.java
메모리에 저장하는 경우

JdbcMemberRepository.java
데이터베이스에 저장하는 경우

profile
better than yesterday

0개의 댓글