반응형
목차
Ex2Main
package nested.anonymous.ex;
public class Ex2Main {
public static void helloThor() {
System.out.println("프로그램 시작");
//코드 조각 시작
for (int i = 0; i <= 5; i++) {
System.out.println("천둥의 신 토르!!!");
}
//코드 조각 종료
System.out.println("프로그램 종료");
}
public static void helloLoki() {
System.out.println("프로그램 시작");
//코드 조각 시작
for (int i = 0; i <= 5; i++) {
System.out.println("장난의 신 로키!!!");
}
//코드 조각 종료
System.out.println("프로그램 종료");
}
public static void main(String[] args) {
helloThor();
helloLoki();
}
}
helloThor(), helloLoki()의 코드 조각 시작 ~ 종료부분은 중복코드다.
리팩토링 😃
God
package nested.anonymous.ex;
public interface God {
void god();
}
Ex2RefMainV1
package nested.anonymous.ex;
public class Ex2RefMainV1 {
public static void hello(God god) {
System.out.println("프로그램 시작");
//코드 조각 시작
god.god();
//코드 조각 종료
System.out.println("프로그램 종료");
}
//구현체
static class Loki implements God {
@Override
public void god() {
System.out.println("장난의 신 로키!!!");
}
}
//구현체
static class Thor implements God {
@Override
public void god() {
System.out.println("천둥의 신 토르!!!");
}
}
public static void main(String[] args) {
hello(new Loki());
hello(new Thor());
}
}
God 인터페이스를 만들고 Loki와 Thor 클래스에서 이를 구현하도록 했고 메서드 오버라이딩을 했다.
Loki, Thor클래스가 God을 구현 했으니 God 타입으로 받을 수 있게 되었고 메인 메서드에서 Loki, Thor 인스턴스를 넘기면 hello 메서드안의 god.god()에서 넘어온 타입에 따라 오버라이딩 된 메서드가 실행된다.
만일 아이언맨을 추가로 출력하고 싶으면 God 인터페이스를 구현한 IronMan 클래스를 만들어서 메인 메서드에서 아이언맨의 인스턴스만 전달하면 된다.
물론 강의 내용 복기 때문에 토르와 로키를 정적 중첩 클래스로 만들었지만 밖으로 빼도 된다.
개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.
틀린 점 있을 경우 댓글 부탁드립니다.
반응형
'IT > development' 카테고리의 다른 글
[java] generic review (feat. 동영상 촬영) (27) | 2024.12.27 |
---|---|
[java] 다형성을 이용한 중복 코드 분리 (feat. 익명 클래스) (1) | 2024.12.25 |
[thymeleaf] Thymeleaf Layout (feat. sb-admin 2) (33) | 2024.12.22 |
[spring] AOP로 트랜잭션 관리 (feat. 롤백 처리) (33) | 2024.12.01 |
[java] extends (feat. simple) (2) | 2024.10.23 |
댓글