본문 바로가기
2023 활동 - 4학년/[1월 ~ 4월] sw 아카데미 백엔드 과정

[2023.02.17 / CNU SW Academy] 객체지향 프로그래밍 4

by 은행장 노씨 2023. 2. 17.

추상 클래스와 인터페이스

메소드 오버로딩

: 동일한 이름의 새로운 메소드를 정의하는 것

  • 단, 새로운 메소드는 아래의 조건 중 1개 이상을 만족
    - 기존 같은 이름의 메소드와 파라미터 개수가 다름
    - 기존 같은 이름의 메소드와 파라미터 타입이 다름
  • 기존 같은 이름의 메소드와 리턴 타입만 다르거나, 
    접근 지정자만 다른 메소드는 정의 불가
    -> 컴파일 오류 발생

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

: 전달되는 인자의 개수와 정적 타입에 따라 호출된 메소드가 결정

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

 


추상 클래스

: 클래스는 객체를 찍어낼 수 있는 “틀” 이라면, 추상 클래스는 상속만을 위한 “미완성 틀"

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

출처 : 객체지향 프로그래밍

추상 클래스를 보면 구멍이 있다. 

 

- 유닛 공통이 갖는 특성과, 동작은 다르지만 공통적으로 갖는 행동이 존재

 

인터페이스

: 인터페이스는 추상 클래스보다 추상화 정도가 높은 설계도 또는 껍데기

- 추상클래스보다 훨씬 많이 쓰인다. 

- like 설계도

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

출처 : 객체지향 프로그래밍

 

인터페이스들 사이에서는 상속 개념이 있다. 

- 인터페이스는 인터페이스끼리 상속이 가능

- 하나의 인터페이스가 여러 인터페이스를 상속받는 "다중 상속"이 가능

 

- JAVA 클래스의 경우 오직 하나의 부모

- C++ 의 경우 다중 상속이 허용

 

클래스의 상속과 인터페이스 구현

하나의 클래스가 상속과 인터페이스 구현을 동시에 수행할 수 있음

- 인터페이스의 다형성도 가능

출처 : 객체지향 프로그래밍

 

자바는 인터페이스를 정말정말정말정말 많이 써야 한다. 

- 인터페이스를 만들면서 사고력이 늘어난다. 

- 어떤 기능을 제공해야 할까

 

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

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