[리팩토링] 메소드 추출

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

리팩토링의 주된 작업은 코드를 포장하는 메소드를 적절히 정리하는 것이다.
핵심적인 리팩토링 기법은 코드 뭉치를 별도의 메소드로 빼내는 메소드 추출, 반대로 메소드를 호출 하는 곳에 메소드 삽입 기법이다.

메소드 추출

메소드 추출시에 가장 힘든 작업은 지역변수 처리, 주로 임시변수로 힘든경우가 많음.
1. 임시변수를 메소드 호출로 전환 후 없어도 되는 임시변수 삭제
2. 임시변수가 여러곳에서 사용된다면 임시변수 분리
3. 임시변수가 너무 얽혀 있다면 자료 객체 클래스로 전환해서 사용

 

void printOwing(double amound)
{
     printBanner();

     print("name : " + _name);
     print("amount : " + amound);
}

void printOwing(double amound)
{
     printBanner();
     printDetail();
}

void printDetail(amount)
{
     print("name : " + _name);
     print("amount : " + amound);
}

코드에 대해서 목적을 알수 있는 직관적 메소드를 작성한다.

메소드의 내용이 간결해지는 것도 중요하지만 중요한 것은 길이가 아니라 메소드명과 메소드 기능이
메소드명을 통해 알수 있냐는 것.

void printOwing()
{
	Enumertaion e = _orders.elements();
	double outStanding = 0.0;
		
	while(e.hasMoreElements())
	{
		Order each = (Order) e.netxElements();
		outStanding += each.getAmount();
	}
		
    System.out.println("고객명 : " + _name);
	System.out.println("외상액 : " + _outStanding);
}

void printOwing()
{
	double outStanding = getOutstanding();
	printDetail();
}

double getOutstanding()
{
	Enumertaion e = _orders.elements();
	double outStanding = 0.0;

    while (e.hasMoreElements())
	{
		Order each = (Order) e.netxElements();
		outStanding += each.getAmount();
	}

		retrun outStanding;
}

void printDetail()
{
	System.out.println("고객명 : " + _name);
	System.out.println("외상액 : " + _outStanding);
}
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 방문
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상쾌한기분
[리팩토링] 메소드 추출
상단으로

티스토리툴바