티스토리 뷰

Paradigm/OOP

[OOP] AdapterPattern

Mr.SIM 2013. 5. 10. 23:10

어댑터(Wrapper) 클래스는 기존 클래스에 대한 수정 없이 서로 직접적으로 상호작용할 수 없는 두 클래스를 상호작용할 수 있도록 해준다.

즉, ‘이미 제공되어 있는 것’과 ‘필요한 것’의 차이를 없애줄 수 있는 패턴


예) A라는 회사에서 B라는 회사에서 만든 코드를 자기회사에서 만든 회사의 코드와 연동시킬 때, 

     코드를 받을 때 마다 수정할 순 없다. 이때사용되는 것이 Adapter패턴!!


AdpaterPattern의 구현은 is-a 또는 has-a 로 구현된다.


--------------------------------------------------------------------------------------------------------------


User라는 클래스가 있을 때, UserAdapter를 구현해보자.

public class User {
	private String firstName;
	private String surName;

	public User(String firstName, String surName) {
		this.firstName = firstName;
		this.surName = surName;
	}
	public String getFirstName() {
		return firstName;
	}
	public String getSurName() {
		return surName;
	}
}



has-a를 통한 Adpater구현

public class UserAdapter implements FullName {

	private User user;

	public UserAdapter(User user) {
		this.user = user;
	}

	@Override
	public String getFullName() {
		return user.getFirstName() + user.getSurName();
	}
} 



is-a를 통한 Adapter구현 

public class UserAdapter extends User implements FullName {

	public UserAdapter(String firstName, String surName) {
		super(firstName, surName);
	}

	@Override
	public String getFullName() {
		return getFirstName() + getSurName();
	}
}



어떤 어댑터를 사용해야 하나?

 특정 클래스와 그것의 모든 후손 클래스에 대한 공통 adapter를 제공하고 싶을 경우에는 클래스 어댑터를 사용할 수 없다.

 = 자바의 경우 다중 adaptee를 포장해야 하면 객체 어댑터를 통해서만 가능함


차이점 : 

클래스 어댑터: 1 객체, 객체 어댑터: 2 객체를 생성

어댑터의 특정 기능의 제공 측면에서는 기존 기능을 상속받기 때문에 클래스 어댑터가 유리함

'Paradigm > OOP' 카테고리의 다른 글

[OOP] StatePattern  (0) 2013.05.28
[OOP] TemplatePattern  (0) 2013.05.13
[OOP] 초기화를 위한 Null Object  (0) 2013.04.27
[OOP] CommandPattern 구현해보기  (0) 2013.04.27
[OOP] Singleton, Doubleton, Mutilton  (0) 2013.04.19
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday