0 객체 지향 프로그래밍 입문
source: categories/study/oop_programming/opp_programming_0.md
0. 들어가며
- 비용
- 객체
- 캡슐화
- 다형성과 추상화
- 상속보단 조립
- 기능과 책임 분리
- 의존과 DI
선수 지식
- private, public
- 클래스, 추상 클래스, 인터페이스
- 추상 메서드
- 상속(extends, implements)
- 오버라이딩(재정의)
비용
- 구글 검색: Slow and dirty with callouts
- 배포 차수가 늘어나면 늘어날 수록, 코드 1줄 작성하는데 드는 비용이 급격하게 증가한다. (비용 = 시간 또는 개발자수)
- 배포 차수가 늘어나는데, 총 코드량 증가율은 점점 줄어든다. (배포 차수는 많아지는데 해당 서비스의 기능이 추가되는 건 거의 없다는 뜻, 수정만 많다는 소리)
- 왜 이런 일들이 발생할까?
- 예시: 시간측정 코드 (밀리초 단위로..)
- 시간이 지나서 나노초 단위로 재도록 하자! 그래서 수정
- 이런 코드가 하나만 있으면 괜찮은데, 보통 이런 코드는 하나만 있지 않다. 여러군데 비슷한 코드가 많다.
- 그 코드를 모두 찾아 수정 -> 한줄 수정하는데 큰 비용 발생
- 처음 조건과 다른 수정사항이 생길 때
- 해당 조건문 안에 또 조건을 추가해야되는 경우 발생
- 이렇게 분기처리가 늘어가고….
- 시간이지나 이 분기처리 코드의 존재를 모르는 사람이 디버깅하다가… 이런 분기처리 코드를 나중에 발견
- 코드를 찾고 분석하는 시간이 길어짐 -> 큰 비용 발생
- 회원 권한 분기처리
- 추후에 특정 회원권한 추가됨, 조건문으로 분기처리
- if 문으로 마구마구 분기처리
- 추후 비용을 증가시키는 그런 유형의 코드임
코드 비용 증가 주요 원인
- 코드 분석 시간 증가
- 코드 변경 시간 증가
소프트웨어의 가치 : 변화
- 얼마나 잘 변화할 수 있느냐? 이것이 소프트웨어의 가치
비용과 변화
- 낮은 비용으로 변화할 수 있어야 함
- 이를 위한 방법
- 패러다임
- 객체 지향, 함수형, 리액티브, …
- 코드, 설계, 아키텍처
- DRY, TDD, SOLID, DDD, …
- 클린 아키텍처, MSA, …
- 패러다임
객체 지향과 비용
- 캡슐화 + 다형성(추상화)