1 minute read

OOP04

추상 클래스와 인터페이스

메소드 오버로딩

  • 동일한 이름의 새로운 메소드를 정의하는 것
  • 단, 새로운 메소드는 아래의 조건 1개 이상을 만족
  • 기존 같은 이름의 메소드와 파라미터 개수가 다름
  • 기존 같은 이름의 메소드와 파라미터 타입이 다름
  • 기존 같은 이름의 메소드와 리턴 타입만 다르거나, 접근 지정자만 다른 메소드는 정의불가

메소드 오버로딩과 정적 디스패치

  • 전달되는 인자의 개수와 정적 타입에 호출될 메소드가 결정
  • 정적 디스패치 : 컴파일 시점에 호출될 메소드가 결정
    1. 인자와 파라미터 개수가 맞는 메소드 탐색
    2. 탐색된 메소드 중 인자와 파라미터 타입이 일치하는 것 선택
    3. 일치하는 것이 없으면 인자를 파라미터 타입으로 변환할 때 비용이 가장 작은 것 선택
      • 비용이 가장 작은 것이 1개 이상이면 컴파일 오류 발생

오버라이딩은 번역 에러가 나지 않음, 오버로딩은 번역 시점에 어떤 메소드를 고를지를 결정하기 때문에 컴파일 에러가 발생함.

추상 클래스란?

  • 클래스는 객체를 찍어낼 수 있는 “틀”이라면, 추상 클래스는 상속만을 위한 “미완성 틀”
  • 구현이 정의되지 않은 추상 메소드를 포함.
  • 추상 메소드 : 선언은 있으나 구현이 없는 메소드로, abstract 키워드로 정의
  • 자식마다 다르게 구현될 것으로 예상되는 행동을 추상 메소드로 정의
  • “미완성 틀”이므로 객체 생성이 불가
  • 상속받은 자식 클래스에서 추상 메소드에 구현을 추가하여 “틀” 완성
  • 즉, 다른 클래스로의 확장에 도움을 주는 클래스

인터페이스란?

  • 인터페이스는 추상 클래스보다 추상화 정도가 높은 설계도 또는 껍데기
  • 상수와 추상 메소드만 멤버로 가질 수 있음
  • 껍데기이므로 객체 생성이 불가
  • 오직 다른 클래스에 의해 “구현”될 목적
  • “구현” 클래스들은 인터페이스의 모든 추상 메소드를 구현해야 함.
  • 클래스들의 공용 “규격”을 제시 - 클래스, 추상 클래스와 동일하게 하나의 타입
  • 같은 인터페이스를 “구현”한 클래스들은 동일한 메소드를 가짐.

인터페이스 상속

  • 인터페이스는 인터페이스끼리 상속이 가능
  • 하나의 인터페이스가 여러 인터페이스를 상속받는 “다중 상속”이 가능
  • Java 클래스의 경우는 오직 한명의 부모만을 가질 수 있음
  • C++의 경우, 클래스의 다중 상속이 허용
  • 하나의 클래스가 상속과 인터페이스 구현을 동시에 수행할 수 있음.

인터페이스 활용의 장점 - 선언과 구현의 완벽한 분화

  • 협업의 효율성 향상
    • 인터페이스만 정의한 후, 이를 바탕으로 동시에 여러명이 프로그램을 개발할 수 있음.
  • 프로그램의 표준화
    • 인터페이스로 틀을 작성한 후, 이에 맞추어 프로그램을 개발하여 전형화
  • 프로그램 변화에 대응
    • 인터페이스를 활용하면 클래스 간의 의존성이 낮아져 프로그램 확장 및 수정이 용이

Categories:

Updated: