본문 바로가기
Develop/Design

[Design Pattern] Adapter 패턴

by 코딩의성지 2021. 8. 5.

하이..

 

요즘 전에 했던 프로젝트를 복기해보면서 어떤 기술을 썼는지 하나씩 정리해 가고 있다.

 

오늘은 전에 회사에서 간편로그인 시스템을 구축할때 썼던 패턴이었던 Adapter 패턴에 대해 정리해보려한다.

 

개발 당시 이런 이슈가 있었다.

 

기존에 사용하던 로그인 서버가 있었고, 내가 구축하던 간편로그인 기능을 해당 서버에 추가해야하는 상황이 발생했다. 그러기 위해서는 기존 로그인 모듈이 있던 클래스를 고쳐야 하는 위험?이 있었는데, 이를 Adapter 패턴으로 잘 풀어 냈다. 

 

Adpater 패턴을 이용하면 기존의 클래스를 고치지 않고 필요한 기능은 별도의 Adapter를 구현하여 이용할 수 있다. 이 Adapter 에서는 기존 클래스 기능을 그대로 사용할 수도 있고, 수정해서 사용할 수도 있고 , 새롭게 고쳐서 사용할 수도 있다.

 

어댑터 패턴은 위의 다이어그램 형태를 따른다.

 

간단하게 설명드리자면 LoginFramework 클래스는 기존에 사용하던 로그인 모듈이라 생각하시면 되고,

LoginFrameworkAdapter 에서 기존에 사용하던 LoginFramework를 포함하여, 기능을 구현해 내는 형태이다.

LoginFrameworkAdapter는 ILoginFramework 인터페이스를 구현하는 형태로 제공된다.

 

간단하게 구현한 코드를 예시로 드리겠다.

 

LoginFramework

public class LoginFramework {
	private boolean isLogin = false;


	public void login() {
		if(isLogin == false) {
			System.out.println("서비스에 로그인 하셨습니다.");
			isLogin = true;
		} else {
			System.out.println("이미 로그인 중입니다.");
		}
	}

	public void logout() {
		System.out.println("로그아웃 되었습니다.");
		isLogin = false;
	}
}

 

ILoginFramework

public interface ILoginFramework {
	public void login();
	public void logout();

	public void setType(String type);
}

 

LoginFrameworkAdapter

public class LoginFrameworkAdapter implements ILoginFramework {
	// 확장 클래스 멤버변수 선언
	private LoginFramework login;
	private String loginType;

	// 생성자에서 생성
	public LoginFrameworkAdapter() {
		login = new LoginFramework();
		loginType = "패턴";
	}


	// 기존 기능 수정하여 사용
	@Override
	public void login() {
		System.out.print(loginType+ " 방식으로 ");
		login.login();
	}

	// 기존 기능 그대로 사용
	@Override
	public void logout() {
		login.logout();
	}

	// 새로운 기능 생성
	@Override
	public void setType(String type) {
		loginType = type;
		System.out.println(type +"으로 로그인 타입이 변경되었습니다.");
	}
}

 

실무에서 생각보다 어댑터 패턴은 굉장히 많이 쓰이니, 제대로 익혀두길 권장한다.

 

끝.

반응형

댓글