추상 클래스와 인터페이스
메소드 오버로딩
: 동일한 이름의 새로운 메소드를 정의하는 것
- 단, 새로운 메소드는 아래의 조건 중 1개 이상을 만족
- 기존 같은 이름의 메소드와 파라미터 개수가 다름
- 기존 같은 이름의 메소드와 파라미터 타입이 다름 - 기존 같은 이름의 메소드와 리턴 타입만 다르거나,
접근 지정자만 다른 메소드는 정의 불가
-> 컴파일 오류 발생
메소드 오버로딩과 정적 디스패치
: 전달되는 인자의 개수와 정적 타입에 따라 호출된 메소드가 결정
- 정적 디스패치: 컴파일 시점에 호출될 메소드가 결정
- 인자와 파라미터 개수가 맞는 메소드 탐색
- 탐색 된 메소드 중 인자와 파라메터 타입이 일치하는 것 선택
- 일치하는 것이 없으면 인자를 파라메터 타입으로 변환할 때 비용이 가장 작은 것 선택
-> 비용이 가장 작은 것이 1개 이상이면 컴파일 오류 발생
추상 클래스
: 클래스는 객체를 찍어낼 수 있는 “틀” 이라면, 추상 클래스는 상속만을 위한 “미완성 틀"
- 구현이 정의되지 않은 추상 메소드를 포함
- 추상 메소드 : 선언은 있으나 구현이 없는 메소드, abstract 키워드로 정의
- 자식마다 다르게 구현될 것으로 예상되는 행동을 추상 메소드로 정의 - "미완성 틀"이므로 객체 생성이 불가
- 상속받은 자식 클래스에서 추상 메소드에 구현을 추가하여 "틀" 완성
-> 다른 클래스로의 확장에 도움을 주는 클래스
추상 클래스를 보면 구멍이 있다.
- 유닛 공통이 갖는 특성과, 동작은 다르지만 공통적으로 갖는 행동이 존재
인터페이스
: 인터페이스는 추상 클래스보다 추상화 정도가 높은 설계도 또는 껍데기
- 추상클래스보다 훨씬 많이 쓰인다.
- like 설계도
- 상수와 추상 메소드만 멤버로 가질 수 있음
- 껍데기이므로 갭체 생성이 불가
- 오직 다른 클래스에 의해 "구현" 될 목적
- 구현 클래스들은 인터페이스의 모든 추상 메소드를 구현해야 함 - 클래스들의 공용 "규격"을 제시 - 클래스, 추상 클래스와 동일하게 하나의 타입
- 같은 인터페이스를 구현한 클래스들은 동일한 메소드를 가짐
인터페이스들 사이에서는 상속 개념이 있다.
- 인터페이스는 인터페이스끼리 상속이 가능
- 하나의 인터페이스가 여러 인터페이스를 상속받는 "다중 상속"이 가능
- JAVA 클래스의 경우 오직 하나의 부모
- C++ 의 경우 다중 상속이 허용
클래스의 상속과 인터페이스 구현
하나의 클래스가 상속과 인터페이스 구현을 동시에 수행할 수 있음
- 인터페이스의 다형성도 가능
자바는 인터페이스를 정말정말정말정말 많이 써야 한다.
- 인터페이스를 만들면서 사고력이 늘어난다.
- 어떤 기능을 제공해야 할까
인터페이스 활용의 장점 - 선언과 구현의 완벽한 분화
- 협업의 효율성 향상
- 인터페이스만 정의한 후, 이를 바탕으로 동시에 여러명이 프로그램을 개발할 수 있음 - 프로그램의 표준화
- 인터페이스로 틀을 작성한 후, 이에 맞추어 프로그램을 개발하여 전형화 - 프로그램 변화에 대응
- 인터페이스를 활용하면 클래스 간의 의존성이 낮아져 프로그램 확장 및 수정이 용이
'2023 활동 - 4학년 > [1월 ~ 4월] sw 아카데미 백엔드 과정' 카테고리의 다른 글
[2023.02.15 / CNU SW 아카데미] 31일차 회고록 (0) | 2023.02.17 |
---|---|
[2023.02.17 / CNU SW 아카데미] 33일차 회고록 (0) | 2023.02.17 |
[2023.02.14 / CNU SW 아카데미] 실리콘벨리에서 날아온 데이터베이스 D-15 (0) | 2023.02.14 |
[2023.02.14 / CNU SW 아카데미] 30일차 회고록 (0) | 2023.02.14 |
[2023.02.14 / CNU SW 아카데미] 객체지향 프로그래밍2 (0) | 2023.02.14 |