[Java] 클래스와 객체 & 추상 클래스와 인터페이스

ina·2022년 8월 19일
0
post-thumbnail

객체(instance)와 클래스(Class)

  • 클래스
    • 설계도 역할 : 객체를 생성하기 위한 필드와 메소드가 정의되어진 것 (ex. 붕어빵 틀)
  • 객체
    • 클래스로부터 만들어진 실체,객체를 해당 클래스의 인스턴스(instance)라고 부른다 (ex. 붕어빵의 다양한 맛)

추상 클래스(abstract Class) vs 인터페이스(interface)

  • 추상 클래스(abstract Class)
    • 클래스들의 공통적인 특성을 추출하여 선언한 클래스
    • 객체(인스턴스)를 생성할 수 없는 미완성 클래스
    • 추상 클래스와 실체 클래스(객체를 직접 생성할 수 있는 클래스)는 상속의 관계를 가진다
    • 인스턴스를 생성할 수 없지만, 상속을 통한 슈퍼클래스로 사용하거나 다형성 활용을 위한 참조변수 타입으로 사용 가능하다
    • 추상 클래스의 용도
      • 공통된 필드와 메서드의 이름을 통일할 목적
      • 실체 클래스를 작성할 때 시간 절약
    • 추상 클래스 선언 - 클래스 선언에 abstract, extends 키워드
      public abstract class 클래스명 {
      	// 필드
      	// 생성자
      	// 메서드   
      	// 일반메서드
      	// 추상메서드
      }
    • 추상 메서드와 재정의
      • 추상 클래스 설계 시 하위 클래스가 반드시 실행 내용을 채우도록 강제하고 싶은 메소드가 있을 경우 해당 메서드를 추상 메서드로 선언
      • 메서드 바디( = 구현부 {})가 존재하지 않는 메서드 = 미완성 메서드
  • 인터페이스(interface)
    • 추상 클래스가 미완성 설계도라면, 인터페이스는 밑그림만 그려져 있는 기본 설계도
    • 인터페이스는 상수추상 메서드만 가질 수 있다
    • 추상 메서드를 포함하므로 객체(인스턴스) 생성 불가
    • 클래스는 서브 클래스에서 다중 상속이 불가능하지만, 인터페이스는 서브 클래스에서 다중 상속이 가능
    • 인터페이스끼리의 상속은 implements가 아닌 extends키워드 사용
    • 클래스는 상속받아 확장(extends)의 개념이 강하지만, 인터페이스는 상속받아 추상메서드들을 구현(implements)의 개념이 강하다
    • 인터페이스 정의 기본 문법 - interface , implements 키워드
      [접근제한자] interface 인터페이스명 {
      	// 상수
      	// 추상메서드
      }
      
      [접근제한자] class 클래스명 implements 인터페이스명 {}
    • 인터페이스의 필요성
      • 구현의 강제로 코드의 통일성 향상
      • 인터페이스를 통한 간접적인 클래스 사용으로 모듈 교체가 용이
      • 서로 상속 관계가 없는 클래스간의 인터페이스를 통한 상속 관계 부여 ⇒ 다형성 확장
      • 모듈간 독립적 프로그래밍으로 인한 개발 기간 단축
  • 정리
    • 인터페이스implements 키워드처럼 인터페이스에 정의된 메소드를 각 클래스의 목적에 맞게 기능을 구현하는 역할
    • 추상 클래스extends 키워드를 사용해서 자신의 기능들을 하위 클래스로 확장 시키는 역할
    • ex) 추상 클래스는 동물 상속 관계를 예로 들어 하위 클래스들인 고양이, 강아지 등등은 울어보세요() 메서드를 자신의 특징에 맞게 확장해서 사용한다
    • ex) 인터페이스는 대표적으로 JDBC(자바에서 DB에 접속할 수 있도록 하는 API)가 있는데 이럴 때는 각 DBMS(데이터의 집합)들이 자신의 기능에 맞게 인터페이스의 정의된 메서드를 구현한다

    참고자료
    도서 : 혼자 공부하는 자바 - 신용권
    블로그 :
    자바의 추상 클래스와 인터페이스
    [Java] 인터페이스와 추상 클래스 차이는 무엇일까?

profile
🐢 💨 💨

0개의 댓글