[학습노트] 객체 지향 프로그래밍 입문 - ncrash/programming-note GitHub Wiki

강좌

목차

  • 비용
  • 객체
  • 캡슐화
  • 다형성과 추상화
  • 상속보단 조립
  • 기능과 책임 분리
  • 의존과 DI

비용

  • img_0832
  • img_0837
  • img_0833
  • img_0834

객체

  • img_0839
  • img_0836
  • img_0837
  • img_0838
  • img_0840

캡슐화

  • 데이터 + 관련 기능 묶기
  • 캡슐화는 기능의 구현을 외부에 감추는것
    • 객체가 기능을 어떻게 구현했는지 외부에 감추는 것
    • 구현에 사용된 데이터의 상세 내용을 외부에 감춤
  • 정보 은닉(Information Hiding) 의미 포함
  • 캡슐화를 통해 기능을 사용하는 코드에 영향을 주지 않고 (또는 최소화) 내부 구현을 변경할 수 있는 유연함
    • 외부에 영향 없이 객체 내부 구현 변경 가능

캡슐화 규칙

  • Demeter's Law
    • img_0850
  • Tell, Don't Ask
    • img_0849

캡쳐

img_0848 img_0846 img_0847 img_0845 img_0844 img_0843

추상화

추상화 예제

개발 시간 증가 이유

  • 코드 구조가 길어지고 복잡해짐
    • 새로운 클라우드 추가시 모든 메서드에 새로운 if 블록 추가
      • 중첩 if-else는 복잡도가 배로 증가
      • if-else가 많을수록 진척 더딤 (신중모드)
      • image
  • 관련 코드가 여러 곳에 분산됨
    • 한 클라우드 처리와 관련된 코드가 여러 메소드에 흩어짐
  • 결과적으로, 코드 가독성과 분석 속도 저하
    • 코드 추가에 따른 노동 시간 증가
    • 실수하기 쉽고 이로 인한 불필요한 디버깅 시간 증가

기능과 책임 분리

몇 가지 책임 분배/분리 방법

  • 패턴 적용
  • 계산 기능 분리
    • 역할 분리와 테스트(PointCalculator)
    • 분리 연습(Movie, Rental)
    • img_0823
    • img_0826
  • 외부 연동 분리
  • 조건별 분기는 추상화(FileInfo)
    • 연속적인 if-else는 추상화 고민
    • img_0824

상속보단 조립(Composition over inheritance)

  • 상속하기에 앞서 조립으로 풀 수 없는지 항상 검토
  • 진짜 하위 타입인 경우에만 상속 허용

상속의 단점 해결방법 -> 조립

  • 조립 (Composition)
    • 여러 객체를 묶어서 더 복잡한 기능을 제공
    • 보통 필드로 다른 객체를 참조하는 방식으로 조립
    • 또는 객체를 필요 시점에 생성 또는 구함

img_0829 img_0827 img_0828

기타

  • img_0825