6 정리

source: categories/study/oop_programming/opp_programming_6.md

6. 정리

  • 소프트웨어의 가치: 변화
    • 적은 비용으로 변화할 수 있는 방법 중 하나 객체 지향

  • 객체는 제공하는 기능으로 정의
    • 예: 회원 객체
      • 암호 변경하기 기능
  • 메서드를 이용해서 기능 명세
    • 이름, 파라미터, 결과로 구성


public Member {
    public void changePassword(String curPw, String newPw) {
        // ...
    }
}



  • 캡슐화: 내부 구현 감춘
    • 이는 내부 구현 변경에 따른 외부 영향을 최소화
    • 내부 구현 변경의 유연함
  • 요구사항의 변화가 내부 구현을 변경 Account객체의 hasRegularPermission() 메소드 수정해도 이 메소드를 사용하는 외부 코드는 수정 X
  • 캡슐화된 기능을 사용하는 코드 영향 최소화

  • 추상화: 여러 구현의 공통점을 상위 타입으로 도출
    • 사용 대상을 변경할 수 있는 유연함을 얻을 수 있었음

  • 상속보단 조립
    • 상속의 3가지 단점을 조립하는 방식으로 해소
      1. 상위 클래스 변경 어려움
      2. 불필요 클래스 증가
      3. 상속 오용

  • 기능과 책임 분리 (회원가입 기능)
    • 한 메소드나 클래스가 커지면 절차지향의 문제가 발생할 수 있기 때문에 분리할 필요가 있다.
  • 네 가지 분리 방법
    • 패턴 적용
    • 계산 기능 분리
    • 외부 연동 분리
    • 조건별 분기는 추상화
  • 적절히 책임을 분리할수록 테스트 용이

  • 의존과 DI
    • 의존 대상이 많을수록 수정 어려움. 의존 대상은 적을 수록 좋다.
    • 의존 대상을 줄이는 방법으로 클래스의 기능 분리와 의존 대상을 합치는 방법을 언급했었음
  • DI로 의존 객체 접근
    • 의존 객체 변경이 쉽고 테스트에서 대역 객체 사용 용이

  • 다음 학습 추천
    • 복습
    • TDD (개발 속도, 좋은 설계 가능성 높여줌)
    • 함수형 프로그래밍 기초 (비용을 낮춰주는 다른 방법)
    • 각 패러다임의 설계 패턴 (지식/지혜 재사용)
    • UML (도식화)

  • 개발자는 코드를 변경해야 하는 사람
    • 변경 비용을 낮추기 위한 노력 필요