티스토리 뷰

0. inferface

0.1 inferface

:: 추상화 + 다형성을 위해 사용

:: 구현 클래스를 위한 메서드 타입에 대한 명시(제네릭을 포함한..)

:: 인터페이스 내에 정적 멤버와 정적 메서드 정의 가능
    -> 정적 메서드 정의 시 static 생략 불가.

  • 인터페이스 추상화
    :: 가상 필요한 요소를 제외하고 모두 은닉 
        => 인터페이스(interface) :: 구현체는 가리고 메서드만 노출
        => 추상 클래스(abstact class) :: 일부 구현체는 가리고 필요한 필드, 메서드만 노출

  • default 메서드
    :: 구현 클래스에서 구현하지 않아도 되는 기본 메서드
    :: default 메서드의 출현으로 private 메서드 또한 사용이 가능해짐 -> default 메서드를 지원해주기 위해
    :: 그래서 private 메서드는 인터페이스 내 구현

  • 예시
더보기
interface Animal {
    // 추상 메서드
    void sound();

    // default 메서드 (자바 8부터 가능)
    default void eat() {
        System.out.println("먹는 중입니다.");
    }

    // static 메서드 (자바 8부터 가능)
    static void info() {
        System.out.println("이것은 동물 인터페이스입니다.");
    }
}

// 인터페이스 구현
class Dog implements Animal {
    @Override
    public void sound() {
        System.out.println("멍멍!");
    }
}

class Cat implements Animal {
    @Override
    public void sound() {
        System.out.println("야옹!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.sound();  // 멍멍!
        myDog.eat();    // 먹는 중입니다.

        myCat.sound();  // 야옹!
        myCat.eat();    // 먹는 중입니다.

        Animal.info();  // 인터페이스의 static 메서드 호출
    }
}

0.2 abstract class

:: 미완성 클래스

:: 하나 이상의 추상 메서드 포함 가능

:: 추상 클래스는 객체를 직접 생성 X -> 상속을 통해 사용됨

:: abstract class는 interface와 class의 중간 성격

  • 예시
더보기

인터페이스 내 추상 메서드는 구현 x -> 추가적인 구현 메서드들을 만들어 랩핑

abstract class MakingRamen implements RamenProcess {
	public void boiling() {
    	System.out.println("- 라면을 함께 만들어볼까요?");
		System.out.printf("1. 첫째로, 물은 %S 을/를 넣을게요.%n", water());
		System.out.printf("2. 둘째로, 스프는 %S 을/를 넣을게요. 면보다 스프먼저!%n", soup());
		System.out.printf("3. 마지막으로는, 면은 %S 을/를 투척할게요.%n", noodle());
		System.out.println("- 자, 다 만들었습니다. 맛있게 드세요.");
	}
}

 

추상 클래스에서 미구현할 경우 이를 상속받는 클래스에서는 반드시 구현해야 함

class MakingSinRamen extends MakingRamen {
	public String water() { return "수돗물"; }
	public String soup() { return "신라면 스프"; }
	public String noodle() { return "건면"; }
}

class MakingJinRamen extends MakingRamen {
	public String water() { return "정수물"; }
	public String soup() { return "진라면 스프"; }
	public String noodle() { return "생면"; }
}

1.abstract class VS inferface

  abstract class inferface
목적 - 클래스 간의 연관 관계 구축
- 하위로 확장하며 구현
- 관련 클래스 간의 공통 기능 제공
- 같은 동작을 함을 보장
- 클래스의 동작을 표준화
사용 가능한 변수(필드) 모두 사용 가능 static final(상수)만 가능
사용 가능한 접근 제어자 public만 가능
사용 가능 메서드 - abstract method,
- default method,
- static method,
- private method
상속 키워드 extends implements
다중 상속/구현 X - 다중 상속 O - 다중 구현
공통점 1. 추상 메서드를 가짐
2, 인스턴스화 x
3. 인터페이스 or 추상 클래스를 상속 받아 구현한 구현체의 인스턴스를 사용
4. 최하단 자식 메서드의 경우, 반드시 추상 메서드를 구현해야 함

2. 사용하는 경우

2.1 추상 클래스를 사용하는 경우

  1. 상속 받는 클래스들이 공통으로 가지는 매소드와 필드가 많음
    => 중복 멤버 통합 시,
  2. 멤퍼에 public 이외의 접근자 선언이 필요한 경우
  3. 요구사항 + 구현 세부 정보의 일부 기능만 지정 시
  4. 하위 클래스가 오버라이드하여 재정의하는 기능들을 공유하기 위한 상속 개념을 사용 시,
  5. 명확한 계층 구조가 필요할 경우 - 연관 관계를 명확히

2.2 인터페이스를 사용하는 경우

  1. 애플리케이션의 기능 정의 시, 그 구현 방식이나 대상에 대한 추상화가 필요할 경우
  2. 관련성 없는 클래스들을 묶을 때(형제 관계)
  3. 다중 상속을 통한 추상화 필요 시 - 마커 인터페이스로 사용
  4. 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장해야 할 경우

2.3 추상 클래스 + 인터페이스

  1. 인터페이스의 추상메서드의 일부만 구현 후, 넘겨줄 경우
  2. 인터페이스에서 정의하지 못하는 중복된 필드 값을 부여해야할 경우

참조

ASAC 수업자료

 

출처: https://inpa.tistory.com/entry/JAVA-☕-인터페이스-vs-추상클래스-차이점-완벽-이해하기 

 

☕ 인터페이스 vs 추상클래스 용도 차이점 - 완벽 이해

인터페이스 vs 추상클래스 비교 이 글을 찾아보는 독자분들은 아마도 이미 인터페이스와 추상클래스 개념을 학습한 뒤에 이 둘에 대하여 차이의 모호함 때문에 방문 했겠지만, 그래도 다시한번

inpa.tistory.com

-> 정말 큰 도움이 되었다..

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함