[TIL] Spring에서 interface와 abstract class
in TIL on Til, Spring Last modified at:
2025-03-28 TIL
📝 TIL (Today I Learned)
🔗 원본 이슈: #33
📅 작성일: 2025-03-28
🔄 최종 수정: 2025년 04월 08일
🍀 새롭게 배운 것
- Spring을 공부하다가
interface
와abstract class
개념이 헷갈려서 둘 사이에 어떤 관계가 있는지 알아보았다.인터페이스를 추상 클래스가 상속받는 경우는 고급개념이라고 한다..
✅ 인터페이스(interface)란?
- 일종의 기약(약속). 어떤 기능을 반드시 구현해야 한다는 걸 명시해주는 것.
- 예:
interface Animal { void sound(); }
→Animal
인터페이스를 구현하는 클래스는sound()
를 반드시 구현해야 함.
✅ 추상 클래스(abstract class)란?
- 일부는 구현되어 있고, 일부는 구현이 안 된 중간 단계의 클래스
- 공통 기능은 구현하고, 필수 구현 사항은 abstract로 남김.
✅ 그럼 인터페이스를 추상 클래스가 “상속받는”다는 건?
public interface Animal {
void sound();
void eat();
}
public abstract class AbstractAnimal implements Animal {
// 일부만 구현함
@Override
public void eat() {
System.out.println("This animal eats food.");
}
// sound()는 구현 안 함 → 자식 클래스가 구현하게 만듦
}
👉 이렇게 쓰는 이유?
- 공통 로직을 추상 클래스에서 한 번만 구현하고,
- 각 서브 클래스는 나머지 인터페이스 기능만 구현하면 되니까 코드가 더 깔끔해진다.
💡 Spring에서 자주 쓰이는 이유
- 예를 들어, 여러 서비스 클래스가 공통적인 작업(예: 로깅, 에러 처리 등)을 해야 할 때:
public interface MyService {
void doSomething();
}
public abstract class AbstractMyService implements MyService {
protected void log(String msg) {
System.out.println("[LOG] " + msg);
}
}
→ 이렇게 추상 클래스에서 공통 기능을 넣어두면, 실제 서비스 클래스에서는 doSomething()
만 구현하면 돼서 유지보수가 쉬워진다.
🔁 정리하자면!
- 인터페이스: “이 기능은 꼭 만들어야 해!”라고 강제.
- 추상 클래스: “공통 코드는 여기 있어. 너는 나머지만 구현해!”
- 인터페이스를 추상 클래스가 상속받는 것: 공통 기능은 추상 클래스가 제공하고, 나머지는 자식 클래스에게 위임하는 깔끔한 구조.
class, interface, abstract class를 통한 설계 예시
// 인터페이스
interface Flyable {
void fly();
}
interface Attackable {
void attack();
}
// 추상 클래스
abstract class Character {
void move() {
System.out.println("이동 중...");
}
abstract void specialSkill();
}
// 구체 클래스
class Warrior extends Character implements Attackable {
public void attack() {
System.out.println("검으로 공격!");
}
public void specialSkill() {
System.out.println("분노 발동!");
}
}
class Fairy extends Character implements Flyable {
public void fly() {
System.out.println("훨훨 날기~");
}
public void specialSkill() {
System.out.println("마법 사용!");
}
}
- 이런 식으로 하면 공통 기능은 추상 클래스, 특수 능력은 인터페이스로 조합해서 유연한 설계가 가능.