0 객체 지향 프로그래밍 입문

source: categories/study/oop_programming/opp_programming_0.md

0. 들어가며

  1. 비용
  2. 객체
  3. 캡슐화
  4. 다형성과 추상화
  5. 상속보단 조립
  6. 기능과 책임 분리
  7. 의존과 DI

선수 지식

  1. private, public
  2. 클래스, 추상 클래스, 인터페이스
  3. 추상 메서드
  4. 상속(extends, implements)
  5. 오버라이딩(재정의)

비용

  • 구글 검색: Slow and dirty with callouts
    • 배포 차수가 늘어나면 늘어날 수록, 코드 1줄 작성하는데 드는 비용이 급격하게 증가한다. (비용 = 시간 또는 개발자수)
    • 배포 차수가 늘어나는데, 총 코드량 증가율은 점점 줄어든다. (배포 차수는 많아지는데 해당 서비스의 기능이 추가되는 건 거의 없다는 뜻, 수정만 많다는 소리)

  • 왜 이런 일들이 발생할까?
    • 예시: 시간측정 코드 (밀리초 단위로..)
    • 시간이 지나서 나노초 단위로 재도록 하자! 그래서 수정
    • 이런 코드가 하나만 있으면 괜찮은데, 보통 이런 코드는 하나만 있지 않다. 여러군데 비슷한 코드가 많다.
    • 그 코드를 모두 찾아 수정 -> 한줄 수정하는데 큰 비용 발생

  • 처음 조건과 다른 수정사항이 생길 때
    • 해당 조건문 안에 또 조건을 추가해야되는 경우 발생
    • 이렇게 분기처리가 늘어가고….
    • 시간이지나 이 분기처리 코드의 존재를 모르는 사람이 디버깅하다가… 이런 분기처리 코드를 나중에 발견
    • 코드를 찾고 분석하는 시간이 길어짐 -> 큰 비용 발생

  • 회원 권한 분기처리
    • 추후에 특정 회원권한 추가됨, 조건문으로 분기처리
    • if 문으로 마구마구 분기처리
    • 추후 비용을 증가시키는 그런 유형의 코드임

코드 비용 증가 주요 원인

  • 코드 분석 시간 증가
  • 코드 변경 시간 증가

소프트웨어의 가치 : 변화

  • 얼마나 잘 변화할 수 있느냐? 이것이 소프트웨어의 가치

비용과 변화

  • 낮은 비용으로 변화할 수 있어야 함
  • 이를 위한 방법
    • 패러다임
      • 객체 지향, 함수형, 리액티브, …
    • 코드, 설계, 아키텍처
      • DRY, TDD, SOLID, DDD, …
      • 클린 아키텍처, MSA, …

객체 지향과 비용

  • 캡슐화 + 다형성(추상화)