JAVA - 추상 클래스, 인터페이스

이상해씨·2022년 7월 30일
0

웹 풀스택(JAVA)

목록 보기
8/54

✔추상 클래스

1. 추상 클래스(Abstract Class)

  • 하나 이상의 추상 메서드를 포함하는 클래스. 공통 모듈을 추출해 구현하고 세부적인 조정이 필요한 부분은 추상 메서드로 구현.
    • 추상 메서드 : 구현부없이 선언부만 남긴 메서드. abstract 키워드 사용.
      • 자손 클래스에서 반드시 재정의되어야 하므로 구현이 무의미한 메메서드에 적용
    • 재사용성 상승 : 상속 관계를 통해 공통 모듈의 중복 최소화 -> Overriding을 통해 재정의
// 추상 클래스
public abstract class Parent{
	public abstract void p(){};
}

// 자손 클래스1
public class Child1 extends Parent{
	public void p(){
		System.out.println("Child1");
	}
}

// 자손 클래스2
public class Child2 extends Parent{
	public void p(){
		System.out.println("Child2");
	}
}

2. 추상 클래스 특징

  • abstract 클래스는 상속 전용의 클래스.
    • 추상 메서드(구현부가 없는 메서드)가 있으므로 객체 생성 불가.
    • 추상 클래스에는 abstract 키워드를 추가하여 객체를 생성할 수 없음을 명시
    • 상위 클래스 타입으로 자손 클래스 참조 가능.(다형성)
  • 조상 클래스에서 상속받은 abstract 메서드를 재정의하지 않는 경우
    • 클래스 내부에 abstract 메서드가 있는 상황이므로 자식 클래스 또한 추상 클래스로 선언되어야 한다.
  • 구현의 강제를 통해 프로그램 안정성 향상
    • interface에 있는 메서드 중 구현할 수 있는 메서드를 구현해 개발의 편의 지원.

✔인터페이스

1. 인터페이스(Interface)

  • 인터페이스 : 서로 다른 두 시스템 장치. 소프트웨어 등을 서로 이어 주는 부분.
    • GUI(Graphic User Interface) : 프로그램과 사용자 사이의 접점.
  • JAVA의 인터페이스
    • 최고 수준의 추상화 단계 : 일반 메서든는 모두 abstract 형태
      • JDK 8에서 default method와 static method 추가.
    • 형태
      • 클래스와 유사하게 interface 선언.
      • 멤버 구성
        • 모든 멤버 변수는 public static final이며 생략 가능.
        • 모든 메서드는 public abstract 이며 생략 가능.
    • 상속 : 인터페이스끼리의 상속.
      • 클래스와 마찬가지로 extends를 이용해 상속.
      • 클래스와 다른 점은 인터페이스는 다중 상속이 가능.
        • 헷갈릴 메서드의 구현부 자체가 없음.
    • 구현과 객체 참조
      • 클래스에서 implements 키워드를 사용하여 구현
      • implements한 클래스
        • 모든 abstract 메서드를 재정의 또는 abstract 클래스 명시.
        • 여러개의 interface implements 가능.
      • 다형성은 조상 클래스 뿐 아니라 조상 인터페이스에도 적용.
interface P{
	void a();
}

class Impl implements P{
	publicc void a(){
    	System.out.println("인터페이스 구현.");
    }
}

class Main{
	public static void main(String[] args){
    	P test = new Impl();
        
        test.a();
    }
}

2. 인터페이스 필요성

  • 구현의 강제로 표준화 처리(abstract 메서드와 비슷.)
    • JDBC(Interface) -> MySql, Oracle 등 벤더 별 interface 구현 Class
    • 어떤 DB를 쓰던지 똑같은 Java 코드로 실행할 수 있다.
  • 인터페이스를 통한 간접적인 클래스 사용으로 손쉬운 모듈 교체 지원
  • 서로 상속의 관계가 없는 클래스들에게 인터페이스를 통한 관계 부여로 다형성 확장
    • 다형성의 기본은 클래스이지만, 이미 상속을 한 상태라면 인터페이스로 추가할 수 있다.
  • 모듈 간 독립적 프로그래밍 가능 -> 개발 기간 단축
    • 먼저 구조만 구현한 뒤, 모듈 간 독립적으로 필요한 부분 구축해나갈 수 있다.

3. (Default / Static) 메서드

  • Default Method : 인터페이스에 선언된 구현부가 있는 일반 메서드.
    • 선언부에 default 키워드 추가 후 구현부 작성
      • 기본 접근 제한자 : public default
    • 필요성 : interface에 추가해야하는 기능 발생
      • 기존 방식 : implements한 모든 클래스에서 재정의 진행 필수.
      • default : abstract가 아니므로 반드시 구현해야할 필요가 없음.
      • default의 추가로 기존의 추상 클래스 역할이 줄어들게 되었다.
  • Static Method : 일반 클래스의 static 메서드와 동일하게 사용.
    • 구현체 클래스 없이 바로 인터페이스 이름으로 메서드 접근하여 사용 가능.
  • default method간의 충돌!!!!
    • JDK 1.7 이하의 java에서는 interface method에 구현부가 없으므로 충돌이 없엇음.
    • 1.8부터 default method가 생기면서 동일한 이름을 갖는 구현부가 있는 메서드가 충돌.
    • method 우선 순위
      • super class의 method 우선 : super class가 구체적인 메서드를 갖는 경우 default method는 무시.
      • interface간의 충돌 : 하나의 interface에서 default method를 제공하고 다른 interface에서도 같은 이름의 메서드(default 유무와 무관)가 있을 때 sub class는 반드시 override해서 충돌 해결.
profile
후라이드 치킨

0개의 댓글