본문 바로가기
Java/자바의정석

JAVA _객체지향언어 개념 -3-(자바의정석 7장)

by 유서담 2023. 7. 19.

추상클래스 ( abstract )

  • 미완성 설계도. ( 미완성 메서드를 갖고 있는 클래스 )
  • 다른 클래스에 도움을 주기 위한 것.
  • 인스턴스 생성 불가
  • 상속을 통해 추상메서드를 완성해야 인스턴스 생성이 가능하다

추상 클래스의 작성

  • 여러 클래스에 공통적으로 사용할 수 있는 추상 클래스 바로 작성하거나 기존 클래스의 공통부분을 뽑아서 추상 클래스를 만든다
    1. 추상 클래스를 상속받는다
    2. 추상 메서드의 구현부 { }를 작성한다
    3. 완성된 설계도 → 객체 생성이 가능하게 된다
  • 상속 계층도에서 내려갈수록 기능과 멤버가 추가되어 구체화의 정도가 심해지고 올라갈수록 추상화의 정도가 심해진다

추상 클래스의 장점

  1. 설계도를 쉽게 작성
  2. 코드 중복 제거
  3. 코드 관리가 용이

추상메서드 ( abstract 리턴타입 메서드이름 () ; )

  • 미완성 메서드
    • 선언부만 작성하고 구현부 { 몸통 } 이 없는 메서드
  • 공통적으로 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 ( 자손마다 몸통이 다를 경우 )
  • 추상메서드를 하나라도 구현하지 않으면 여전히 미완성
  • 필수적인 기능이라서 강제성이 있다

인터페이스 ( interface )

  • 추상메서드의 집합체
  • 구현된 것이 전혀 없는 기본 설계도. ( 알맹이 없는 껍데기라고 표현할 수 있다 )
    • 모든 멤버가 public 이다

추상클래스와 인터페이스의 차이점

  • 추상클래스 : 추상메서드를 가진 일반 클래스
  • 인터페이스 : 추상메서드’만’ 가지고 있다. 두개의 공통점을 추상메서드를 갖고 있다는 점.
    • 추상메서드 빼고 구현된 것이 아무것도 없다고도 할 수 있다

인터페이스 작성

interface 인터페이스이름 {

public static final 타입 상수이름 = 값 ; // 상수

public abstract 메서드이름(매개변수 목록) ; // 추상메서드

}

  • 모든 멤버가 public , class 대신 interface
  • public , static , final , abstract 생략이 가능하다

인터페이스의 상속

  • 인터페이스 조상은 인터페이스만 가능하다 ( Object가 조상이 아님.)
  • 다중상속 구현가능 ( 추상메서드는 충돌해도 문제가 없음. )

인터페이스 구현 ( 인터페이스에 정의된 추상메서드를 완성하는 것 )

  • 인터페이스 상속을 받으려면 상속에서 사용하던 extends가 아닌 implements를 사용한다

class 클래스이름 implements 인터페이스이름 {

( 인터페이스에 정의된 추상메서드를 모두 구현해야한다 )

}

  • 인터페이스의 일부만 구현하는 경우 , 클래스앞에 abstract를 붙여서 추상클래스로 선언해야 한다.
  • 추상클래스와 인터페이스 둘 다 추상메서드를 가진다는 공통점이 있지만, 인터페이스는 iv를 가질 수 없다.

인터페이스를 이용한 다형성

  • 인터페이스 타입의 참조변수로 인터페이스를 구현한 클래스의 인스턴스 참조 가능
  • 인터페이스를 메서드의 매개변수 타입으로 지정가능
  • 인터페이스를 메서드의 리턴타입으로 지정가능
    • 안맞으면 형변환 ( 이 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 의미 )

인터페이스 장점

  • 두 대상(객체) 간의 ‘연결, 대화, 소통’을 돕는 ‘중간역할’을 한다
  • 기계와 사람이 쓰는 언어가 다르기 때문에 사람이 직접 기계를 다루는게 쉽지않다.
    1. 개발시간 단축
    2. 표준화가 가능하다
    3. 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.
    4. 독립적인 프로그래밍이 가능하다
      1. 변경에 유리한 설계 가능
      2. 선언과 구현 분리