프로젝트를 진행하게 되면 절대 혼자서 하지 않고 여러명에서 잡고 진행하게 된다.


하지만 지역마다 사투리가 있는것 처럼 사람마다 다양한 코딩 스타일이 존재하고


메소드 이름을 짓는 방식이 다르고 등등 여러가지 일치하지 않는 부분이 생기게 된다.


이를 해결하기 위해 핵심 기능 구현부분에 Interface를 적용한다.







Interface를 상속받는 클래스는 Interface에 존재하는 메소드 형식을 사용해야 하는 제약이 걸리기 때문에


틀(Frame)을 어느정도 일치 시킬 수 있다.


한번 확인해보자.



public interface MemberService {
    // 로그인용 메소드
    // public abstract가 전부 들어가기 때문에 애초에 생략해도 된다.(Interface)
    Member selectMember(Member m) throws LoginFailException;

    // 회원 가입용 메소드
    void insertMember(Member m) throws InsertFailException;
   
}


먼저 Member Service라는 인터페이스이고


throw가 붙은 두가지의 메소드가 존재한다.








다음은 MemberServiceImpl 클래스는 인터페이스 MemberService를 상속받는다.



public class MemberServiceImpl implements MemberService{
   
    // 자동으로 더 넓거나 같은 접근제한자가 잡힌다.
    // 이러한 인터페이스를 사용한 구조는 딱 정해져있는 메소드를 사용하므로(매개변수도 바꿀 수 없다.)
    // 행위를 강제한다고 한다.
    @Override
    public Member selectMember(Member m) throws LoginFailException {
        // SqlSession은 MyBatis에서 커넥션 대신 사용
        SqlSession session = getSqlSession();
       
        Member member = new MemberDao().selectMember(session, m);
       
        session.close();
       
        return member;
    }

    // 회원 가입용 메소드
    @Override
    public void insertMember(Member m) throws InsertFailException {
        SqlSession session = getSqlSession();
       
        new MemberDao().insertMember(session, m);
       
        session.commit();
        session.close();
    }
   
}



어노테이션을 통해 인터페이스에 해당하는 메소드를 생성하지 않으면 오류가 발생하고


리턴 값이나 throw 같은 형식 또한 완전 일치된다.


이를 통해 팀 프로젝트 설계 시 충돌나는 부분을 최소화 할 수 있다.








또한 이와 같은 구조를 사용하는 이점으로는 유지보수가 훨신 수월하게 된다.


사용할 때 다음과 같이 사용하게 되는데


MemberService ms = new MemberServiceImpl();



        try {
            Member member = ms.selectMember(m);
           

        } catch (LoginFailException e) {

        }




생성을 MemberService ms = new MemberServiceImpl(); 이와같이 Interface로 선언하고


일반 클래스로 생성하는 방식으로 사용하게 된다.


이러한 방식을 의존성을 낮춘다고 한다.(의존성 역전, IoC라고 한다.)


(나중에 DI, Dependency Injection, 의존성 주입이라는 개념이 Spring Framework에 나온다.)


의존성이란 클래스 선언과 생성과의 관계로 한쪽이 바뀔 경우 한쪽도 같이 바꿔야 하는데 이러한 경우를 의존성이 강하다고 한다.


프로젝트 구조에 관해서는 다음에 자세히 설명.










+ Recent posts