6 정리
source: categories/study/oop_programming/opp_programming_6.md
6. 정리
- 소프트웨어의 가치: 변화
- 적은 비용으로 변화할 수 있는 방법 중 하나 객체 지향
- 객체는 제공하는 기능으로 정의
- 예: 회원 객체
- 암호 변경하기 기능
- 예: 회원 객체
- 메서드를 이용해서 기능 명세
- 이름, 파라미터, 결과로 구성
public Member {
public void changePassword(String curPw, String newPw) {
// ...
}
}
- 캡슐화: 내부 구현 감춘
- 이는 내부 구현 변경에 따른 외부 영향을 최소화
- 내부 구현 변경의 유연함
- 요구사항의 변화가 내부 구현을 변경
Account
객체의hasRegularPermission()
메소드 수정해도 이 메소드를 사용하는 외부 코드는 수정 X - 캡슐화된 기능을 사용하는 코드 영향 최소화
- 추상화: 여러 구현의 공통점을 상위 타입으로 도출
- 사용 대상을 변경할 수 있는 유연함을 얻을 수 있었음
- 상속보단 조립
- 상속의 3가지 단점을 조립하는 방식으로 해소
- 상위 클래스 변경 어려움
- 불필요 클래스 증가
- 상속 오용
- 상속의 3가지 단점을 조립하는 방식으로 해소
- 기능과 책임 분리 (회원가입 기능)
- 한 메소드나 클래스가 커지면 절차지향의 문제가 발생할 수 있기 때문에 분리할 필요가 있다.
- 네 가지 분리 방법
- 패턴 적용
- 계산 기능 분리
- 외부 연동 분리
- 조건별 분기는 추상화
- 적절히 책임을 분리할수록 테스트 용이
- 의존과 DI
- 의존 대상이 많을수록 수정 어려움. 의존 대상은 적을 수록 좋다.
- 의존 대상을 줄이는 방법으로 클래스의 기능 분리와 의존 대상을 합치는 방법을 언급했었음
- DI로 의존 객체 접근
- 의존 객체 변경이 쉽고 테스트에서 대역 객체 사용 용이
- 다음 학습 추천
- 복습
- TDD (개발 속도, 좋은 설계 가능성 높여줌)
- 함수형 프로그래밍 기초 (비용을 낮춰주는 다른 방법)
- 각 패러다임의 설계 패턴 (지식/지혜 재사용)
- UML (도식화)
- 개발자는 코드를 변경해야 하는 사람
- 변경 비용을 낮추기 위한 노력 필요