[Java] 4. 추상 클래스, 인터페이스

2026. 1. 28. 22:09·프로젝트/Java

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 메소드와 같다. (인스턴스화 하지 않고도 클래스로 호출 가능)

 

* 인터페이스를 다형성으로 활용하는 법

  1. 느슨한 결합(Loose Coupling): 클래스 간의 의존성을 줄여준다. 필요한 메소드에만 의존하도록 인터페이스 분리.
  2. 표준화: 프로젝트에서 여러 개발자가 협업할 때, 인터페이스를 통해 메소드 이름을 통일하여 소통 비용을 줄인다.

[예시 코드]

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
'프로젝트/Java' 카테고리의 다른 글
  • [Java] 6. 예외처리
  • [Java] 5. 문자열 (String, StringBuilder, StringBuffer), 자바 표준 입출력
  • [Java] 3. Object 클래스 (toString, equals, hashCode, clone)
  • [Java] 2. this, super / 다형성 (Up-casting, Down-casting)
sophon
sophon
sophon 님의 블로그 입니다.
  • sophon
    sophon 님의 블로그
    sophon
    • 카테고리 (172) N
      • 컴퓨터공학 (36)
        • 데이터베이스 (19)
        • 네트워크 (15)
        • 기타 이슈 (2)
      • 프로젝트 (16) N
        • Java (8)
        • Spring (4) N
        • Docker (4)
      • 코딩테스트 (95) N
        • BOJ (74)
        • 프로그래머스 (7)
        • 프로그래머스 SQL (12) N
        • PS Snippets (2)
      • 🌱 잡담 (22)
        • 자격증 (7)
        • 좋은 시 모음 (12)
        • 책과 영화 (3)
        • 기록 (0)
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sophon
[Java] 4. 추상 클래스, 인터페이스
상단으로

티스토리툴바