12. 메서드(함수) - 좋은 클래스에는 좋은 메서드가 있다.

내용


반드시 현재 클래스의 인스턴스 변수 사용하기

  • 다른 클래스의 인스턴스 변수를 변경ㅏ는 메서드는 좋지 않음.

    • 왜?

    • 응집력이 낮은 구조를 의미하기 때문

불변을 활용해서 예상할 수 있는 메서드 만들기

  • 가변 인스턴스는 의도지 않는 영향을 줄 수 있음.

    • 즉 유지보수가 어려워짐

묻지 말고 명령하라

  • 다른 클래스를 확인하고 조작하는 메서드 구조 = 응집력 낮은 구조

  • getter/setter 는 다른 클래스를 확인하고 조작하는 메서드 구조가 되기 쉽다.

커맨드/쿼리 분리

int gainANdGetPoint() {
   point += 10;
   return point
}
  • 상태변경 + 추출 동시에 하지 말자

  • CQS, Command-Query Separation

    • 메서드는 커맨드 또는 쿼리 중에 하나만 해야한다.

    • 커맨드?

      • 상태를 변경하는 것

    • 쿼리?

      • 상태를 리턴하는 것

    • 모디파이어

      • 커맨드와 쿼리를 동시에 하는 것

  • 어쩔 수 없는 경우도 있지만.. 가능한 피하자

매개변수

  • 매개변수 설계 시 주의할 점

    • 불변 매개변수로 만들자

    • 플래그 매개변수 사용하지 않기

    • null 전달하지 않기

    • 출력 매개변수 사용하지 않기

    • 매개변수는 최대한 적게 사용하기

리턴 값

  • 리턴 값 설계 시 주의할 점

    • 자료형을 사용해서 리턴 값 의도하기

      • 기본 자료형 사용하지 말고, 독자적인 자료형을 사용해서 의도를 명확하게 나타내는 것이 좋다.

        • 왜?

        • 실수로 값이 섞이는 경우를 방지할 수 있음.

    • null 리턴하지 않기

    • 오류는 리턴 값으로 리턴하지 말고, 예외 발생 시키기

      • 어떤 값이 여러 의미를 나타내면(중의적), 읽는 사람에게 혼란을 준다

정리


  • CQS, Command-Query Seperation

  • 매개변수 설계, 리턴값 설계

    • 단순한 부분이지만 의도를 작성자의 의도를 드러내야..

    • 다른 사람이 읽어도 오해하지 않도록 할 수 있음.

참고


  • https://product.kyobobook.co.kr/detail/S000202521361

Last updated

Was this helpful?