abstract와 interface

momomoki·2023년 10월 20일
0

abstract(추상 클래스)란?

클래스 안에 메서드만 작성하고 구현부는 작성하지 않은게 추상클래스이다. 추상 클래스를 상속 받아 안에 있는 메서드를 오버라이딩(재정의)해서 구현부를 새로 작성하여 사용하는것을 추상 클래스라고 한다. 예제 코드를 보자

Kind클래스에는 메서드의 이름만 있지 그 어떤것도 없다. 다른게 있다면 클래스와 메서드에 abstract가 있을뿐 그래서 Cola와 Sprite에 상속을 받아 color를 오버라이딩해서 각각 Drink클래스에서 선언을해서 출력하면 Cola에서 오버라이딩한 Black이 Sprite는 transparent라는 결과가 나오게 된다. 추상 클래스는 이제부터 사용될 메서드의 리턴 타입과 이름만 적어둬서 어떤식으로 사용하지는 대충 생각하는? 단계에서 해야하는 작업인거같다.

interface(인터페이스)란?

인터페이스는 자바에서는 다중상속이 지원을 안하지만 인터페이스를 사용하여 다중상속을 구현 할 수 있으며 접근제한자를 사용하여 추상 메서드를 구현이 가능하며 인터페이스의 멤버변수는 (public static final 생략가능)상수이고 메서드는 public abstract(생략가능)이어야한다 그럼 인터페이스의 예제 코드를 보자


인터페이스를 선언한것들을 Chicken1, Chicken2에 implements를 해서 각각 오버라이딩을 해서 사용이 가능하며 Chicken2에는 다중상속을 했는데 자바에서 지원안하는 다중상속이 가능하다.
오늘은 추상클래스와 인터페이스를 공부해 봤는데 추상클래스와 인터페이스은 비슷하지만 차이점이 있었다. 일단 비슷한점은 둘 다 결국 오버라이딩을 해서 사용한다는 점 결국 그림으로 비유하자면 스케치 단계같았다. 차이점은 추상클래스는 멤버변수를 선언해도 변수처럼 다시 오버라이딩이 가능하지만 인터페이스는 멤버변수를 선언하면 상수로 된다는 점이 달랐고 인터페이스에는 접근제한자와 다중상속이 가능했다. 그렇다면 추상클래스는 extends를 하고 인터페이스는 implements를 할때 그 안의 멤버변수를 자유롭게 바꾸고 사용한다면 추상클래스 아니라면 제가 생각하기에 좀 더 자유롭게 사용할 수 있다고 생각하는 인터페이스를 사용하는게 더 좋아보인다.

profile
얍얍엽엽욥욥

0개의 댓글