package ch08.sec07;
public class ServiceImpl implements Service {
// 따로 메서드 구현하지 않아도 default 메서드 상속됨
}
📌 실행 클래스 (ServiceExample.java)
package ch08.sec07;
public class ServiceExample {
public static void main(String[] args) {
Service service = new ServiceImpl();
service.defaultMethod1();
System.out.println();
service.defaultMethod2();
System.out.println();
Service.staticMethod1();
System.out.println();
Service.staticMethod2();
System.out.println();
}
}
💻 실행 결과
defaultMethod1 종속 코드
defaultMethod 중복 코드A
defaultMethod 중복 코드B
defaultMethod2 종속 코드
defaultMethod 중복 코드A
defaultMethod 중복 코드B
staticMethod1 종속 코드
staticMethod 중복 코드C
staticMethod 중복 코드D
staticMethod2 종속 코드
staticMethod 중복 코드C
staticMethod 중복 코드D
💬 코드 설명
defaultMethod1() 과 defaultMethod2()는 내부에서 defaultCommon() 호출 → 공통 코드 A, B 중복 제거
staticMethod1() 과 staticMethod2()는 staticCommon() 호출 → 공통 코드 C, D 중복 제거
private 메서드는 외부 클래스, 구현 클래스에서 접근 불가 → 인터페이스 내부에서만 안전하게 재사용
📌 간단 정리
메서드 종류
호출 방식
오버라이딩
접근 범위
default
인스턴스 참조 (service.)
가능 ✅
구현 클래스 사용 가능
static
인터페이스명으로 호출
불가 ❌
외부에서 직접 호출
private
내부에서만 호출
불가 ❌
외부 접근 불가 🔒
💡 포인트 정리
private 메서드는 인터페이스 내부 전용 유틸로 사용
default, static 메서드 간의 공통 로직 중복 제거
코드 가독성 및 재사용성 향상, 유지보수 쉬워짐
자바 9 이상에서만 사용 가능
📌 정리하자면, private 메서드는 인터페이스 내부의 코드 정리를 돕는 숨은 도우미 역할을 하며, 외부 노출 없이도 중복 제거와 품질 개선을 이끌어낼 수 있습니다.
이번 글에서는 인터페이스의 상수(static final)와 구현이 강제되는 추상 메서드들을 통해 일정한 규칙을 정의하고 여러 클래스가 이를 구현하는 방식을 실습합니다.
📦 인터페이스 코드 (RemoteControl.java)
package ch08.sec03;
public interface RemoteControl {
int MAX_VOLUME = 10; // public static final 자동 포함
int MIN_VOLUME = 0;
void turnOn(); // public abstract 자동 포함
void turnOff();
void setVolume(int volume);
}
✔ 상수는 public static final, 메서드는 public abstract가 생략되어 있어도 적용됨
📦 구현 클래스 – TV (Television.java)
package ch08.sec03;
public class Television implements RemoteControl {
private int volume;
public void turnOn() {
System.out.println("TV를 켭니다.");
}
public void turnOff() {
System.out.println("TV를 끕니다.");
}
public void setVolume(int volume) {
if (volume > MAX_VOLUME)
this.volume = MAX_VOLUME;
else if (volume < MIN_VOLUME)
this.volume = MIN_VOLUME;
else
this.volume = volume;
System.out.println("현재 TV 볼륨 : " + this.volume);
}
}
📦 구현 클래스 – 오디오 (Audio.java)
package ch08.sec03;
public class Audio implements RemoteControl {
private int volume;
public void turnOn() {
System.out.println("Audio를 켭니다.");
}
public void turnOff() {
System.out.println("Audio를 끕니다.");
}
public void setVolume(int volume) {
if (volume > MAX_VOLUME)
this.volume = MAX_VOLUME;
else if (volume < MIN_VOLUME)
this.volume = MIN_VOLUME;
else
this.volume = volume;
System.out.println("현재 Audio 볼륨 : " + this.volume);
}
}
📌 실행 클래스 (RemoteControlExample.java)
package ch08.sec03;
public class RemoteControlExample {
public static void main(String[] args) {
RemoteControl rc = new Television();
rc.turnOn();
rc.setVolume(5);
rc.turnOff();
rc = new Audio();
rc.turnOn();
rc.setVolume(5);
rc.turnOff();
}
}
💻 실행 결과
TV를 켭니다.
현재 TV 볼륨 : 5
TV를 끕니다.
Audio를 켭니다.
현재 Audio 볼륨 : 5
Audio를 끕니다.
💬 코드 설명
인터페이스에 선언된 MAX_VOLUME, MIN_VOLUME는 공통 볼륨 기준값으로 모든 구현 클래스가 공유
각 구현 클래스(Television, Audio)는 setVolume()에서 이 상수를 기준으로 볼륨을 제한하고 출력
RemoteControl rc = new Audio(); → 하나의 타입으로 모든 장치를 제어하는 다형성 구조
📌 간단 정리
인터페이스 필드
의미
MAX_VOLUME
최대 볼륨 (10)
MIN_VOLUME
최소 볼륨 (0)
💡 포인트 정리
인터페이스의 필드는 자동으로 상수(static final)로 선언됨
구현 클래스는 인터페이스의 모든 추상 메서드를 반드시 구현해야 함
하나의 타입(RemoteControl)으로 다양한 장치를 제어하는 다형성 적용
유지보수가 쉬운, 표준화된 설계 구조를 만들 수 있음
📌 정리하자면, 인터페이스를 활용하면 기능의 일관성 유지와 다양한 객체를 하나의 구조로 통제하는 설계를 할 수 있습니다.
"네 여정에 영원한 사랑과 따스한 햇빛만 가득하길 수호신께서 축복해 주실거야." 깊은 바다 수도회의 상냥하면서도 독실한 성직자 페비. 언제나 진중하면서도 품위 있는 모습을 보여 준다. 그녀는 교리를 엄수하며 스스로를 절제하는 성직자이지만, 여전히 사랑하는 것들을 위해 기뻐하며 즐거워할 수 있는 진실된 마음을 간직하고 있다.
2.1 버전에 출시된 캐릭터로, 광학 효과를 부여하는 강공격 서포터입니다.
딜링을 높여주는 사죄 상태와 광학 효과를 부여하는 고해 상태 중 하나를 정하여 전투하는 방식의 캐릭터입니다.
전용 무기나 공명 해방에서 카드캡터 사쿠라어떠한 마법소녀가 생각나는 컨셉의 캐릭터입니다.
범위도 준수하고 공중에서 강공격을 사용하여 이동하는 거리도 준수합니다.
2. 캐릭터 특징
먼저 공명 스킬을 사용하면 거울의 고리를 소환하는데, 거울의 고리에 맞은 적은 2초간 행동을 정지합니다.
거울의 고리 바깥에서 평타를 칠 경우 고리 안의 적에게 추가 피해를 입힙니다.
거울의 고리 안에서 평타를 칠 경우 평타를 중심으로 적을 끌어당깁니다.
덤으로 소형 유닛의 행동을 방해합니다.
사죄 상태를 사용할 경우, 강공격이 4회까지 가능하고 페비의 피해 비율이 증가합니다.
고해 상태를 사용할 경우, 강공격이 2회까지 가능하고 광학 효과를 부여합니다.
여기서 중요한 것은 반주 스킬의 차이인데, 사죄 상태의 경우 보통은 딜만 증가합니다.
하지만 고해 상태의 경우 다음에 등장하는 캐릭터는 묵념 효과를 획득합니다.
- 묵념 : 공격을 받은 적의 회절 피해 저항을 10% 감소시키고, 광학 피해 부스트 100%를 부여합니다.
기본 사이클 : E꾹 - Q - R - 평평평 - 강공 - 평평평 - 강공 - 교체 ※ 저의 경우 E는 공명해방 이전에 까는 편입니다. 하지만 퀵스왑의 경우 E를 처음에 깔고 스왑한다는 얘기도 있어서 일단 뺐습니다.
3. 추천 템셋팅
▷ 무기
광휘의 찬송가 ( 공 500 / 크리 36% )
페비의 전용 무기로, 공격력이 증가하고 일반 공격과 강공격 피해 보너스가 증가합니다. 반주 스킬을 발동할 경우, 등장 캐릭터가 광학 피해 부스트를 얻으며 30초간 지속되는 무기로 서브 딜러 혹은 서포터로 활용하기 좋은 무기라고 생각합니다. 메인 딜러로 사용할 경우 굳이 쓸 필요가 없는 무기로 평가되는 것 같지만 디자인이 페비랑 잘 어울려서 뽑으면 좋을 것이라고 생각합니다.
꼭두각시의 손 ( 공 500 / 크리 36% )
음림의 전용 무기로, 전체 속성 피해 보너스가 증가합니다. 공명 스킬 피해를 입힐 경우, 공격력이 증가하고 미출전 상태일 경우 공격력이 추가로 증가합니다. 범용성이 뛰어난 무기로 주옵도 비슷하고 실상 광휘의 찬송가와 차이가 크게 나지 않습니다.
옥수 비단 ( 공 500 / 크피 72% )
절지의 전용 무기로, 공격력이 증가합니다. 공명 스킬 피해를 입힐 경우, 일반 공격 피해 보너스를 얻고 반주 스킬을 발동할 경우에 일반 공격 피해 보너스 스택이 3스택일 경우, 모든 스택을 소모하여 자신이 출전 상태가 아닐 시 일반 공격 피해 보너스를 증가시킵니다. 페비의 주딜이 강공격 피해인 것을 생각하면 5성 무기의 체급을 보고 사용하는 무기입니다. 즉, 위의 두 무기가 없을 경우 채용할만 합니다.
청음 ( 공 412 / 크리 20.2% )
선약 방송국 무기로, 5재련을 달성할 경우 나쁘지 않습니다.
▷ 에코, 화음 이펙트
영원의 광채 - 카피타네우스
2세트 - 회절 피해 10% 증가 5세트 - 캐릭터가 적에게 광학 효과를 추가 시,자신의 크리티컬이 20% 증가하고 15초간 지속된다. 광학 효과가 10스택인 적을 공격 시, 자신의 회절 피해 보너스가 15% 증가되고 15초간 지속된다.
메인 슬롯에 악몽 아익스가 아닌 카피타네우스를 착용할 경우 회절 피해와 강공격 피해가 증가하기 때문에 페비에게 잘 어울립니다. 거기에 소환형이어서 반주 스킬이 필드에 남아야 발동하는 페비에게 딱 맞는 조건입니다. 하지만 다른 3코스트 부옵이 더 좋은게 나온다면 악몽 아익스를 장착해도 좋습니다.
떠오르는 구름 - 음험한 백로
2세트 - 공명 효율 10% 증가 5세트 - 반주 스킬을 사용시, 다음에 등장하는 공명자의 공격력이 22.5% 증가하며, 15초간 지속된다.
5세트 효과 덕분에 서포터로 쓸 것이라면 사용하기 좋은 화음 이펙트입니다. 특히 다음 변주로 등장하는 캐릭터에게 피해 증가 효과도 부여하기 때문에 최적의 효과를 볼 수 있지만, 페비의 경우 반주 효과가 필드에 남아 공격을 하는 형태이기 때문에 조금 애매할 수 있습니다. 에코 변신보다 페비의 반주가 더 늦게 발동하기 때문에 변신이 자동으로 풀려 공명 에너지 회복 효과가 발동하지 않습니다. (피증 효과는 잘 발동합니다.) 공명 에너지 회복 효과를 받기 위해서는 홀드로 에코를 발동해야 받을 수 있습니다.
추천되는 주 옵션 COST 4 - 크리티컬 피해, 크리티컬 COST 3 - 회절 피해 보너스 COST 1 - 공격력 백분율
추천되는 보조 옵션 크리티컬 / 크리티컬 피해 / 공명 효율 / 공격력 백분율 / 강공격 피해 보너스