[Java] Abstraction

게맛살맛게·2021년 12월 7일
0

Java

목록 보기
13/18
post-thumbnail

Abstract Class

실체 클래스를 위한 설계 규격

추상화

  • 객체의 속성과 기능 중 중요한 것들은 남기고 필요 없는 것들은 없애는 행위
    또는 객체들 간의 공통되는 특성을 추출하는 것

추상 클래스 (Abstract Class)

  • 실체 클래스의 공통적인 특성을 추출해서 선언한 클래스
  • 실체 클래스를 만들기 위한 부모 클래스로만 사용 (스스로 객체가 될 수 없음 / 미완성 클래스)
  • 확장(extends)를 위한 용도로만 사용
  • 하나 이상의 추상 메서드를 가짐
  • 필드와 메서드를 정의 할 수 있음

추상 메서드

  • 구현이 불가능한 메서드로서 선언만 구현
  • 추상 클래스를 상속하는 실체 자식 클래스는 추상 메서드를 반드시 구현 해야함
  • 추상 메서드는 추상 클래스에만 존재

추상 클래스 구현

클래스 선언에 abstract 키워드

public abstract class 클래스명 {
	// 필드
	// 생성자
	// 메서드 (ex/ public abstract void hello();)
}
  • 추상 클래스의 상속
    extends 키워드 사용
    추상 클래스를 상속받는 클래스는 반드시 추상 클래스 내의 추상 메서드를 구현해야 함
    Override가 필수적이기에 특정 기능의 구현을 강요하는 측면도 있음

  • 활용
    여러 클래스들이 상당수 공통점을 가지고 있으나 부분적으로 그 처리방식이 다른경우
    부모 클래스를 추상 클래스로 정의하여 자식 클래스들이 각각 메서드를 구현


Interface

클래스 구조상 관계와 상관없이 클래스들에 의해 구현될 수 있는 "규약"

사용 목적

  • 클래스들 사이의 유사한 특성을 부자연스러운 상속 관계 없이 얻을 수 있음
  • 개발 코드를 수정하지 않고, 가용하는 객체를 변경 가능
    상속 관계에 상관없이 비슷한 규약 적용

활용

  • 하나 혹은 그 이상의 클래스들에서 똑같이 구현되어질 법한 메서드 선언
  • 클래스 자체를 드러내지 않고 객체의 프로그래밍 인터페이스를 제공 (내부를 알 필요 없음)
  • 인터페이스로 구현한 객체를 참조 할 수 있음
    instanceof를 통해 특정 객체인지 확인 가능

인터페이스 구현

  • 인터페이스 선언
	public interface 인터페이스명 {
		// 추상메소드 선언 (abstract 키워드를 지정하지 않아도 됨)
	}
  • 인터페이스 클래스 구현
	public class Point implements 인터페이스명 {
		// 추상메소드 구현 (Ovrride)
	}
  • 인터페이스 다중 implements
	public class Point implements Drawable, Resizeable, ... {
		...
	}

Abstract Class vs. Interface

  • 상속과 구현추상클래스는 객체를 일반화한 공통 필드와 메서드의 정의에 집중 (적 확장)
    인터페이스는 자연스러운 상속 관계를 해치지 않으면서도 추가 내용을 규정 가능 (적 확장)

  • 일반 클래스 vs 추상 클래스 vs 인터페이스
    * 실체 메서드 (Concrete Method)
    - 메서드의 구현을 포함한 일반적인 메서드
    - 추상 메서드의 반대 개념

상속 + 구현

class 클래스명 extends 부모클래스 implements 인터페이스, ... { }
profile
IT 기술블로그

0개의 댓글