View

Virtual & Abstract & Interface

jaeeH 2022. 3. 3. 09:59

 

 

 

Virtual & Abstract & Interface

 

 

가상 클래스 (Virtual Class)

: virtual 키워드를 사용하는 클래스

 

특징

  • Abstract와는 달리 구체적인 기능 기술 O (본문 정의 O)
  • 파생 클래스에서 재정의 O (필수가 X)
  • 자식 클래스에서 new 또는 override 키워드 사용 O
    • override : 재정의/확장
    • new : 기본 클래스 숨기기
  • base 키워드를 통해 부모 클래스의 함수 호출 O
  • private, static 등 접근 한정자 사용 X

 

 

 

추상 클래스 (Abstract Class)

: 추상 메소드를 포함하고 있는 클래스

※ 추상 메소드 : 선언부만 작성하고 구현부는 작성하지 않은 메소드

 

주로 전혀 다른 클래스들에 사용하기보다는 비슷한 특징을 지닌 클래스들에 사용함

공통된 클래스들에 대해 추상화된 부분을 추상 메소드를 통해 하위 클래스들에게 상속을 통해 사용할 수 있도록 함

 

예시

언제 추상 메소드를 사용할까?

public class mouse extends animals {
    void say() {
    	System.out.printlin("찍찍");
    }
}

public class cat extends animals {
    void say() {
    	System.out.println("야옹");
    }
}

public class animals {
    void say() {
    	System.out.println("???");
    }
}

☞ 위와 같은 경우에 추상 메소드를 사용하면 좋다.

public class animals {
    abstract void say();
}

 

특징

  • extends 키워드를 사용하여 상속
  • 추상 클래스는 키워드 abstract 를 붙여 표현
  • 추상 메소드를 포함하지 않은 클래스에서도 abstract 를 붙여 추상 클래스로 지정 O
  • 추상 메소드를 포함하는 클래스는 반드시 추상 클래스여야 함
  • 클래스를 abstract 로 지정하면 new 를 통해 객체를 직접 생성 X
  • 메소드에 abstract 를 사용할 경우 interface 메소드와 같이 구현 부분은 없음
  • 자식 클래스에서 추상 메소드를 반드시 구현해야 함 (오버라이딩)
  • 상속하는 집합 간에는 연관 관계가 있음
  • 다중 상속 X

 

 

인터페이스

: 일종의 추상 클래스로, 추상 메소드를 갖지만 추상 클래스보다 추상화 정도가 높아

  추상 클래스와 달리 몸통을 갖춘 일반 메소드, 멤버 변수를 구성원으로 가질 수 없음 (구현된 것이 아무것도 없음)

 

특징

  • implements 키워드를 사용하여 상속
  • 그 자체만으로 사용되기보다, 다른 클래스를 작성하는 데 도움을 줄 목적으로 작성됨
  • 일반 메소드 / 멤버 변수를 구성원으로 가질 수 X
  • 모든 메소드는 public abstract 이어야 하며, 이를 생략 O
  • 모든 멤버 변수는 public static final 이어야 하며, 이를 생략 O
  • Java 8 부터는 static, default 메소드 사용 O
  • 상속하는 집합 간에는 연관 관계가 존재하지 않을 수 O
  • 다중 상속 O

public static final 사용?

구현 객체의 같은 상태를 보장하기 위해 사용

인터페이스 변수는 아무 인스턴스도 존재하지 않는 시점이기 때문에 스스로 초기화될 권한이 X

 

 

 

추상 클래스 & 인터페이스의 상속

추상 클래스

: 객체 지향의 상속 특징을 가지고 있음 (상위 클래스의 특성을 재사용&확장)

인터페이스

: 클래스가 '무엇을 할 수 있다'라고 하는 기능을 구현하도록 강제 (클래스의 목적에 맞게 기능 구현)

 

 

사용 케이스

추상 클래스

  • 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우
  • 추상 클래스를 상속받을 클래스들이 공통으로 가지는 메소드와 필드가 많거나, public 이외의 접근자(protected, private) 선언이 필요한 경우
  • non-static, non-final 필드 선언이 필요한 경우 (각 인스턴스에서 상태 변경을 위한 메소드가 필요한 경우)

인터페이스

  • 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우
  • 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지 신경 쓰지 않는 경우
  • 다중 상속을 허용하고 싶은 경우

 

 

 

 

 

 

 

※ 출처

1) https://ri3n.tistory.com/51

 

Unity : Virtual, Abstract, Interface

가상(virtual)과 추상(abstract) 가상과 추상 사이에 핵심적인 차이점은 "완성도"다. 가상 클래스는 재정의(override)할 수 있지만 필수는 아니다. 반대로 추상 클래스는 '불완전하다는 의미'로서 파생

ri3n.tistory.com

 

2) https://minquu.tistory.com/222

 

[복습] 상속(Virtual, Abstract)과 인터페이스 : 잊지말자

OOP 개념에서 상속을 얘기할 때 Virtual(가상) 과 Abstract(추상화)가 많이 사용된다. 그리고 Interface 또한 비슷한 기능을 제공하는데 비교를 알아 보겠다. Virtual (가상) 1. Abstract (추상화)와 다르게 본문

minquu.tistory.com

 

3) new_wisdom.log

 

[Java] 추상 클래스와 인터페이스의 차이

[Java] 내가 이해한 추상 클래스와 인터페이스의 차이 정리 👀

velog.io

 

4) https://devlog-wjdrbs96.tistory.com/370

 

[Java] 인터페이스와 추상 클래스 차이는 무엇일까?

인터페이스와 추상 클래스 차이는? 이번 글에서는 인터페이스와 추상 클래스의 차이에 대해서 정리해보겠습니다. 실제로 이 질문은 면접에서도 자주 물어보는 질문이고, 약간 알듯 말듯 한데

devlog-wjdrbs96.tistory.com

 

 

 

 

 

 

'Basics' 카테고리의 다른 글

CI/CD란?  (0) 2022.04.13
Static이란?  (0) 2022.03.17
프로그래밍 용어 01  (0) 2022.01.07
Share Link
reply
«   2025/01   »
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 31