[학습노트] 객체 지향 프로그래밍 입문 - ncrash/programming-note GitHub Wiki
강좌
목차
- 비용
- 객체
- 캡슐화
- 다형성과 추상화
- 상속보단 조립
- 기능과 책임 분리
- 의존과 DI
비용
객체
캡슐화
- 데이터 + 관련 기능 묶기
- 캡슐화는 기능의 구현을 외부에 감추는것
- 객체가 기능을 어떻게 구현했는지 외부에 감추는 것
- 구현에 사용된 데이터의 상세 내용을 외부에 감춤
- 정보 은닉(Information Hiding) 의미 포함
- 캡슐화를 통해 기능을 사용하는 코드에 영향을 주지 않고 (또는 최소화) 내부 구현을 변경할 수 있는 유연함
- 외부에 영향 없이 객체 내부 구현 변경 가능
캡슐화 규칙
- Demeter's Law
- Tell, Don't Ask
캡쳐
추상화
추상화 예제
개발 시간 증가 이유
- 코드 구조가 길어지고 복잡해짐
- 새로운 클라우드 추가시 모든 메서드에 새로운 if 블록 추가
- 중첩 if-else는 복잡도가 배로 증가
- if-else가 많을수록 진척 더딤 (신중모드)
- 새로운 클라우드 추가시 모든 메서드에 새로운 if 블록 추가
- 관련 코드가 여러 곳에 분산됨
- 한 클라우드 처리와 관련된 코드가 여러 메소드에 흩어짐
- 결과적으로, 코드 가독성과 분석 속도 저하
- 코드 추가에 따른 노동 시간 증가
- 실수하기 쉽고 이로 인한 불필요한 디버깅 시간 증가
기능과 책임 분리
몇 가지 책임 분배/분리 방법
- 패턴 적용
- 계산 기능 분리
- 역할 분리와 테스트(
PointCalculator
) - 분리 연습(
Movie
,Rental
)
- 역할 분리와 테스트(
- 외부 연동 분리
- 조건별 분기는 추상화(
FileInfo
)- 연속적인 if-else는 추상화 고민
상속보단 조립(Composition over inheritance)
- 상속하기에 앞서 조립으로 풀 수 없는지 항상 검토
- 진짜 하위 타입인 경우에만 상속 허용
상속의 단점 해결방법 -> 조립
- 조립 (Composition)
- 여러 객체를 묶어서 더 복잡한 기능을 제공
- 보통 필드로 다른 객체를 참조하는 방식으로 조립
- 또는 객체를 필요 시점에 생성 또는 구함