소프트웨어 악취 를 제거 하 는 리팩토링 : 3 . 5 . 2 잠재 적 인 원인 
 객체 지향 언어 에서 절차 적 인 사고 
 존슨 [ 60 ] 은 절차 적 인 배경 지식 은 있 지만 객체 지향 언어 에 는 서투른 개발자 는 ‘ 상태 ’ 가 아닌 ‘ 동작 ’ 을 위한 클래스 를 만드 는 경향 이 있 다고 했 다 . 이런 설계 로 만든 클래스 에 는 분리 된 ‘ 데이터 클래스 ’ 에 위치 한 데이터 와 함께 동작 하 는 메 서드 가 한두 개 만 있 는 경향 이 있 다 . 절차 적 인 사고 로 만든 이런 클래스 는 보통 자신 에게 유일무이 하 면서 의미 있 는 책임 을 할당 받 지 못한다 . 
 편의 상 부 적절 한 언어 기능 활용 
 종종 프로그래머 는 원래 설계 에서 의도 하 지 는 않 았 지만 단지 ‘ 편의 ’ 나 ‘ 작업 을 끝내 려는 ’ 목적 에서 추상화 를 도입 한다 . 열 거형 대신 ‘ 상수 인터페이스 ’* 를 사용 하 면 프로그래머 는 편하 다 . 상수 인터페이스 를 클래스 에서 구현 하 는 방법 으로 프로그래머 는 타입 이름 을 명시 적 으로 사용 하 지 않 고 도 멤버 에 접근 할 수 있 으며 , 클래스 에서 직접 멤버 에 접근 할 수 도 있 다 . 이것 은 클래스 와 연관 된 행동 양식 없이 상수 값 을 담 는 소유자 로서 만 봉사 하 는 불 필요 한 인터페이스 나 클래스 를 낳 는다 . 
 * 상수 값 을 담 는 소유자 로서 자바 에서 인터페이스 기능 을 사용 한다 .