23. 추상 클래스
추상 클래스에 대해 알아가보자.
23. 추상 클래스
추상 클래스 레퍼런스와 메서드 호출
제대로 알고 가자!
인터페이스 : 객체 사용 규칙을 정의
추상 클래스 : 서브클래스에게 무엇을 물려줘야할 지 정의
추상 클래스
추상클래스 응용
클래스의 사용법이 다르면 display()를 각 타입에 맞춰 따로 정의해야한다.
- display(BubbleSort, int[ ])
- display(QuickSort, int[ ])
문제점
- 중복 코드가 발생하기 쉽다.
- 프로그래밍의 일관성이 없다.
즉, 유지보수가 어려워진다.
- 상속 이용 : 같은 타입으로 만들기
상속을 이용
- 타입을 같게 한다.
타입 → 부모클래스 ⇒ 부모 클래스가 같으면 부모클래스의 레퍼런스로
두 개의 클래스의 객체를 모두 다룰 수 있다. (= 다형적 변수) - 사용법을 같게 한다. → 메서드가 같다 ⇒ 프로그래밍의 일관성 제공
문제점
- sorter가 일반 클래스라서 인스턴스 생성을 못 막음 ex) new Sorter( )
- 타입을 같게 한다.
추상 클래스 도입 : 직접 사용을 제한
문제점
- 다른 개발자가 sort( )를 오버라이딩하지않고 다르게 만들 수 있다.
왜냐? overriding이 강제가 아니기 때문임
- 다른 개발자가 sort( )를 오버라이딩하지않고 다르게 만들 수 있다.
추상 메서드 : 서브 클래스에게 구현의 책임을 떠넘긴다.(= 강제한다.)
추상 메서드로 바꾸면서 구현을 서브 클래스에게 강제한다.
이러면 개발자 마음대로 sort를 오버라이딩 하지않고 다르게 만들 수 없다.인터페이스 : 객체 사용 규칙 정의 → 추상 메서드만 있다면 인터페이스로 전환하기
캡슐화와 접근제어
- 추상화(abstraction)
현실의 개념이나 사물, 물체등을 컴퓨터가 다룰 수 있는 정의 → 데이터, 코드로 변환
- 접근제어(modifier)
1
private, (default), protected, public
추상화가 무너지는 것을 막는다.
유효하지 않은 데이터를 넣거나 메서드를 실행 시키는 것을 방지하기 위해 접근을 제어함
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.