1. 추상 클래스 (abstract class)
- 추상메소드: 선언부만 있고 body(`{ }`)가 없는 메소드. 실제 body는 자식클래스에서 override해서 구현해야함.
- 추상클래스: 하나 이상의 추상메소드를 포함하는 클래스
- `new` 연산자를 통해 직접 인스턴스를 생성할 수 없다.
- 상속받는 자식 클래스가 받드시 추상메소드를 override해서 구현해야한다.
// 추상 클래스 선언
public abstract class Shape {
private String type;
public Shape(String type) {
this.type = type;
}
// 추상 메소드
public abstract void draw();
}
// 실체 클래스
public class Circle extends Shape {
public Circle() { super("Circle"); }
@Override
public void draw() {
System.out.println("Draw Circle~~");
}
}
2. 인터페이스 (interface)
- 인터페이스: 일반적으로 추상메소드만 갖는다. `interface` 키워드를 이용해 정의하고, `implements` 키워드로 구현한다.
[코드 예시]
public interface IBehavior {
// 상수 (public static final 생략 가능)
public static final String MESSAGE = "User define constant";
// 추상 메소드 (public abstract가 생략가능함)
public abstract void play();
// default 메소드
default void defaultMethod() {
System.out.println("Default Method.");
}
// static 메소드
public static void staticMethod() {
System.out.println("Static Method~~");
}
}
- 필드: 인터페이스에 정의하는 모든 필드는 `public static final`(사용자 정의 상수)가 자동으로 적용됨.
- default 메소드: 자체로 완전한 메소드로 자식클래스에서 override하지 않아도 된다. (선택적 재정의 가능)
- 이미 의존성이 많아진 구현된 인터페이스에 추가적인 메소드가 필요할 때 사용된다.
- static 메소드: 일반 클래스의 static 메소드와 같다. (인스턴스화 하지 않고도 클래스로 호출 가능)
* 인터페이스를 다형성으로 활용하는 법

- 느슨한 결합(Loose Coupling): 클래스 간의 의존성을 줄여준다. 필요한 메소드에만 의존하도록 인터페이스 분리.
- 표준화: 프로젝트에서 여러 개발자가 협업할 때, 인터페이스를 통해 메소드 이름을 통일하여 소통 비용을 줄인다.
[예시 코드]
public interface IBehavior {
void play(); // public abstract가 생략됨.
}
public class Soccer extends Sport Implements IBehavior {
@Override
public void play() {
System.out.println("Playing Soccer~~");
}
}
public class BaseGuitar extends Guitar Implements IBehavior {
@Override
public void play() {
System.out.println("Playing BaseGuitar~~");
}
}
public class InterfaceAssist {
public static void main(String[] args) {
play(new Soccer());
play(new BaseGuitar());
}
public static void play(IBehavior ib) {
ib.play(); // 다형성
}
// 출력:
// Playing Soccer~~
// Playing BaseGuitar~~
}
'프로젝트 > Java' 카테고리의 다른 글
| [Java] 6. 예외처리 (0) | 2026.02.06 |
|---|---|
| [Java] 5. 문자열 (String, StringBuilder, StringBuffer), 자바 표준 입출력 (0) | 2026.01.29 |
| [Java] 3. Object 클래스 (toString, equals, hashCode, clone) (0) | 2026.01.28 |
| [Java] 2. this, super / 다형성 (Up-casting, Down-casting) (0) | 2026.01.14 |
| [Java] 1. JVM 메모리 구조 / static, final 키워드 (0) | 2026.01.14 |