티스토리 뷰
반응형
인터페이스
- 기능에 대한 선언과 구현의 분리를 말한다.
- 기능을 통로라고 말할 수 있다.
- Ex.
//AInterface
public interface AInterface {
public void funcA();
}
//AInterfaceImpl
public class AInterfaceImpl implements AInterface {
@Override
public void funcA() {
System.out.println("AAA");
}
}
//Main
public static void main(String [] args) {
AInterface aInterface = new AInterfaceImpl();
aInterface.funcA();
}
- 선언(AInterface)과 구현(AInterfaceImpl)을 분리하여 Main에서 활용하는 것을 확인할 수 있다.
델리게이트
- 기능적인 부분을 다른 이에게 위임하여 사용한다.
- Ex.
public class AObj {
AInterface aInterface;
public AObj(AInterface aInterface) {
this.aInterface = aInterface;
}
public void funcAA() {
//1. 일반적인 기능 구현
//System.out.println("AAA");
//System.out.println("AAA");
//2. 기능 구현을 위임
aInterface.funcA();
aInterface.funcA();
}
}
//Main
public static void main(String []) {
AObj aObj = new AObj(aInterface);
aObj.funcAA();
}
- AObj.funcAA()는 1번처럼 기능을 직접 구현하여 사용하는 것이 아닌 2번처럼 AInterface에게 기능 구현을 위임하여 사용한다.
스트레티지 패턴
- 여러 알고리즘을 하나의 추상적인 접근점(인터페이스)을 만들어 접근 점에서 서로 교환 가능하도록 하는 패턴을 말한다.
요구사항에 맞춰 코드를 작성해보자
요구 사항
- 게임에서 캐릭터와 무기를 구현해보자.
- 무기는 두 가지 종류 : 칼, 검
//접근점
public interface Weapon {
public void attack();
}
//접근점의 구현체 1.
public class Sword implements Weapon{
@Override
public void attack() {
System.out.println("검 공격");
}
}
//접근점의 구현체 2.
public class Knife implements Weapon{
@Override
public void attack() {
System.out.println("칼 공격");
}
}
//클라이언트
public class GameCharacter {
//접근점
private Weapon weapon;
//교환 가능
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
public void attack() {
if(weapon == null) {
System.out.println("맨손 공격");
} else {
//델리게이트
weapon.attack();
}
}
}
//Main
public static void main(String [] args) {
GameCharacter gameCharacter = new GameCharacter();
gameCharacter.attack();
gameCharacter.setWeapon(new Knife());
gameCharacter.attack();
gameCharacter.setWeapon(new Sword());
gameCharacter.attack();
}
유지보수
- 무기 중에 도끼를 추가하자.
//접근점 구현체 추가
public class Ax implements Weapon {
@Override
public void attack() {
System.out.println("도끼 공격");
}
}
//Main
public static void main(String [] args) {
gameCharacter.setWeapon(new Ax());
gameCharacter.attack();
}
- 무기를 추가하는데 게임 캐릭터나 Main의 다른 기능을 건드리지 않고 효율적인 추가가 가능하다.
다이어그램
https://www.youtube.com/watch?v=UEjsbd3IZvA&list=PLsoscMhnRc7pPsRHmgN4M8tqUdWZzkpxY
반응형
'Java > 디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 프로토타입 패턴(1) (0) | 2020.05.03 |
---|---|
[디자인 패턴] 싱글톤 패턴 (0) | 2020.05.03 |
[디자인 패턴] 팩토리 메소드 패턴 (0) | 2020.04.28 |
[디자인 패턴] 템플릿 메소드(Template Method) 패턴 (0) | 2020.04.21 |
[디자인 패턴] 어댑터(Adapter) 패턴 (0) | 2020.04.21 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- package-private
- Spring
- 인프런
- 정적팩터리메서드
- springboot
- 생성자
- Effective Java
- try catch finally
- junit
- 이펙티브자바
- 빌더 패턴
- JPA
- 점층적 생성 패턴
- mustache
- try with resources
- java8
- effectivejava
- 빈 순환 참조
- 이펙티브 자바
- java
- 김영한
- ifPresent
- 연관관계
- 자바8
- 스프링부트
- 복사 팩토리
- jdk버전
- 팩토리 메소드 패턴
- @Lazy
- flatMap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함