개발자가 정복해야 할 객체지향-3

추상 타입과 유연함

  • 추상화는 데이터나 프로세스 등을 의미가 비슷한 개념이나 표현으로 정의하는 과정이다.
FTP에서 파일 다운로드 / 소켓으로 데이터 읽기 / DB 테이블을 조회 => 추상화 => 로그수집

추상 타입과 실제 구현의 연결

  • 상위 타입 인터페이스에 정의된 기능을 실제로 구현하는데, 이들 클래스들은 실제 구현을 제공한다는 의미에서 ‘콘크리트 클래스’라고 부른다.
  • 재사용의 중요성으로 봤을 때 하위 수준의 상세 구현보다는 변하지 않는 상위 수준의 로직을 재사용할 수 있도록 설계하는 것이 중요하다.

변화되는 부분을 추상화하기

  • 추상화가 되어 있지 않는 코드는 주로 동일 구조를 갖는 if-else 블록으로 드러난다.

인터페이스에 대고 프로그래밍하기

  • 실제 구현을 제공하는 콘크리트 클래스를 사용해서 프로그래밍하지 말고, 기능을 정의한 인터페이스를 사용해서 프로그래밍하라는 뜻이다.
  • 인터페이스는 새롭게 발견된 추상 개념을 통해서 도출되는 것이다.
  • 변화 가능성이 높은 경우에 한해서 사용해야한다.

인페이스는 인터페이스 사용자 입장에서 만들기

  • 인터페이스를 작성할 때에는 그 인터페이스를 사용하는 코드 입장에서 작성해야 한다.

인터페이스와 테스트

  • 실제 콘크리트 클래스 대신해 진짜처럼 행동하는 객체를 Mock객체라고 부란다.
  • 테스트 주도 개발(TDD)
  • 테스트를 이용해서 실제 제품 코드를 만들어 간다.
  • 구현할 코드에 대한 테스트를 먼저 작성하고, 작성한 테스트를 통과하는 코드를 점진적으로 완성해 나가는 방식으로 개발을 진행한다.

상속과 재사용

  • 상속을 사용하면 쉽게 다른 클래스의 기능을 재사용하면서 추가 기능을 확장할 수 있기 때문에, 기능을 재사용하는 매력적인 방법이다.
  • 상속은 변경의 유연함이라는 측면에서 치명적인 단점을 갖는다.

상속을 통한 재사용의 단점 - 상위 클래스 변경의 어려움

  • 클래스 계층도가 커질수록 상위 클래스를 변경하는 것은 점점 어려워진다.

상속을 통한 재사용의 단점 - 클래스의 불필요한 증가

  • 유사한 기능을 확장하는 과정에서 클래스의 개수가 불필요하게 증가할 수 있다.

상속을 통한 재사용의 단점 - 상속의 오용

  • 상속은 IS-A 관계가 성립할 때에만 사용해야한다.
  • 같은 종류가 아닌 클래스의 구현을 재사용하기 위해 상속을 받게 되면, 잘못된 사용으로 인한 문제가 발생하게 된다.

      배운점 : 상속에 관한 부분과 추상화의 개념이 아직도 확실하지 않은데, 자주보고 직접 코드와 설계를 해보면서 느껴야겠다. 현재 진행하고 있는 프로젝트에서 코드를 리팩토링 해보고, 좀 더 고민을 해봐야겠다.