[리팩토링] 클래스 멤버변수 이동

2019. 10. 25. 11:21·IT/리팩토링
반응형

어떤 멤버변수 필드가 자신이 속한 클래스보다 다른 클래스에서 더 많이 사용 되어질 때
대상 클래스안에 새 필드를 선언하고 그 필드 참조 부분을 새 필드 참조 하도록 수정하자.

시스템이 발전하고 수정되어 앞으로 나아갈수록 새 클래스가 필요해지며 기능이 여기저기서 사용이 많아진다. 따라서 그러한 것들을 여기저기로 옮겨야 하는 상황과 필요가 있다.

지금은 합리적이고 올바르다고 판단해서 설계 및 개발을 했다 해도, 나중에는 그렇지 않을 수 있다.
문제는 그러한 상황에서 아무것도 하지 않는 것이다.

 

변경전 
AccountType 클래스에서 interestRate 필드를 더 많이 사용하는 경우

class Account
{
	private AccountType _accountType;
	private double _interestRate;

	double interestForAmount_days(double amount, int days)
	{
		return this._interestRate * amount * days / 365;
	}

	example method()
	{
		use _interestRate;
	}

}

class AccoutType
{
	example method()
	{
		use _interestRate;
	}

	example method2()
	{
		use _interestRate;
	}

	example method3()
	{
		use _interestRate;
	}
	
}

 

변경 후
필드 캡슐화 진행

class Account
{
	private AccountType _accountType;

	double interestForAmount_days(double amount, int days)
	{
		return _accountType.getInterestRate() * amount * days / 365;
	}

	example method()
	{
		use _accountType.getInterestRate();
	}

}


class AccoutType
{
	private double _interestRate;

	/* 필드 캡슐화 */
	void setInterestRate(double interestRate)	
	{
		this._interestRate = interestRate;
	}

	double getInterestRate()
	{
		return this._interestRate;
	}
	/* 필드 캡슐화 */

	example method()
	{
		use this.getInterestRate();
	}

	example method2()
	{
		use this.getInterestRate();
	}

	example method3()
	{
		use this.getInterestRate();
	}

}
728x90
반응형
저작자표시 (새창열림)
'IT/리팩토링' 카테고리의 다른 글
  • [리팩토링] 메소드 추출
  • 리팩토링 - 코드 개선 방법
  • [리팩토링] 객체간 메소드 이동
  • [리팩토링] 메소드를 메소드 객체로 전환
상쾌한기분
상쾌한기분
  • 상쾌한기분
    상쾌한기분
    상쾌한기분
  • 전체
    오늘
    어제
    • 분류 전체보기 (251)
      • Python (44)
        • Python (26)
        • Django (6)
        • Flask (4)
        • Open Source (6)
      • Kotlin & Java (5)
        • Spring (2)
        • 프로젝트 (1)
      • Go (11)
      • Database (24)
        • MySQL (21)
        • Redis (3)
      • Infrastructure (2)
        • CDC (4)
        • Kafka (5)
        • Prometheus (2)
        • Fluentd (11)
        • Docker (1)
        • Airflow (2)
        • VPN (2)
      • IT (26)
        • AI (9)
        • Langchain (8)
        • Web (18)
        • Git (8)
        • 리팩토링 (9)
        • Micro Service Architecture (8)
        • Clean Code (16)
        • Design Pattern (0)
        • 수학 (1)
        • 알고리즘 (14)
      • OS (14)
        • Centos (10)
        • Ubuntu (3)
        • Mac (1)
      • Search Engine (2)
        • ElasticSearch (1)
        • Lucene Solr (1)
      • PHP (2)
        • Laravel (1)
        • Codeigniter (1)
  • 블로그 메뉴

    • Github 방문
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Kafka
    Redis
    오블완
    티스토리챌린지
    docker
    파이썬
    MYSQL
    ollama
    prompt
    LLM
    git
    CDC
    fluentd
    http
    go
    Langchain
    python
    performance
    백준
    Golang
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상쾌한기분
[리팩토링] 클래스 멤버변수 이동
상단으로

티스토리툴바