클래스 다루기

1. 클래스란?

연관성이 높고 잘 정의된 기능을 공유하는 데이터와 루틴의 모음

2. 클래스의 토대: 추상 데이터형(Abstract Data Type, ADT)

  • ‘추상 데이터형’은 데이터와 데이터를 처리하는 연산의 집합
  • 객체지향 프로그래밍을 이해하기 위해서는 반드시 ADT를 이해해야함

2.1. ADT 사용의 장점

  1. 구현의 세부사항을 감출 수 있다.(은닉화)
  2. 하나의 변경이 전체에 영향을 미치지 않는다.
  3. 프로그램이 명백하게 정확해진다.

    • ex) currentFont.bold = true 보다 currentFont.setBold() 가 훨씬 의미가 강력하게 전달된다.
  4. 프로그램의 가독성이 높아진다.

    • ex) currentFont.attribute = ‘font-size 16px’ 보다 currentFont.chageSize(16)이 낫다.

2.2. 클래스의 설계와 구현 문제

1. 포함(‘has a’ 관계)

클래스의 멤버 변수(데이터)로 구현한다.

  1. 최후의 수단으로 비공개 상속을 통해서 ‘has a’를 구현하라

    • 책을 읽어도 무슨 말인지 이해가 안가는데, 결국 추천하지 않는 방법임
  2. 약 7개 이상의 데이터 멤버를 포함하는 클래스를 주의하라

    • 더 작은 단위의 클래스들로 나눌 수 있는 가능성이 있다.
    • 공통점이 있는 경우, 나눌 수 있으면 한번 더 나누자!

2. 상속(‘is a’ 관계)

‘상속’의 목적은 두 개 이상의 파생 클래스에서 공통으로 사용되는 요소를 갖는 기본 클래스를 정의하여 더 간단한 코드를 작성하는 데 있다.

  1. 공개 상속을 통해 ‘is a’를 구현해라
  2. 리스코프 치환의 원칙(LSP)

    • 파생 클래스(sub class)가 기본 클래스(최상위 부모 클래스)와 ‘is a’ 관계가 형성되지 않는다면 상속 받으면 안된다.
    • 파생 클래스(sub class)의 사용자가 부모클래스와의 차이점을 못 느낀 채 부모 클래스의 인터페이스를 사용할 수 있어야 한다. => 개발자의 상속에 대한 고민도 줄어들게 할 수가 있음

junism
Written by@junism
interested in FE esp ReactJS

GitHub