본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

메서드 인라인(Inline Method, Inline Function)은 본문이 이름만큼이나 뻔한 메서드를 호출하는 자리에 그 본문을 직접 풀어 넣고 메서드 자체를 없애는 리팩토링 기법으로, 메서드 추출의 반대 방향이다.

메서드를 잘게 나누어 이름을 붙이면 대개 읽기 쉬워지지만, 메서드 본문이 이름과 똑같이 명확할 때는 한 번 더 건너뛰어 읽어야 하는 간접 단계만 늘어난다. 이럴 때 호출하는 곳마다 본문을 넣고 메서드를 지운다. 마틴 파울러의 『Refactoring』 1판(1999)에서는 Inline Method, 2판(2018)에서는 Inline Function 이라 부르며, 파울러의 카탈로그는 이 기법이 Extract Function(메서드 추출)의 역이라고 밝힌다.[1]

// 바꾸기 전
int getRating() {
    return (moreThanFiveLateDeliveries()) ? 2 : 1;
}
boolean moreThanFiveLateDeliveries() {
    return _numberOfLateDeliveries > 5;
}

// 바꾼 뒤
int getRating() {
    return (_numberOfLateDeliveries > 5) ? 2 : 1;
}

moreThanFiveLateDeliveries() 의 본문 _numberOfLateDeliveries > 5 는 메서드 이름만큼 분명하므로, getRating() 안에 그 식을 그대로 넣고 moreThanFiveLateDeliveries() 를 지웠다. 메서드가 하나 사라졌다는 것이 이 기법의 표지다.[1][2]

  • 메서드 본문이 이름보다 더 잘 읽힐 때
  • 지나친 위임으로 메서드가 다른 메서드를 부르기만 하는 단계가 겹겹이 쌓였을 때. 한꺼번에 인라인한 뒤 다시 알맞게 나누면 구조를 바로잡기 쉽다
  • 잘못 나뉜 메서드들을 하나로 모은 다음 다시 추출하려 할 때

하위 클래스가 그 메서드를 재정의(오버라이딩)하고 있으면 인라인하면 안 된다. 하위 클래스에서 재정의할 메서드가 없어지기 때문이다.[2]

  1. 하위 클래스에서 재정의하지 않는지 확인한다
  2. 메서드를 호출하는 곳을 모두 찾는다
  3. 호출하는 곳마다 메서드 본문으로 바꾼다
  4. 테스트한 뒤 메서드 정의를 지운다

비슷한 리팩토링과 구별하기

편집 원본 편집
기법 하는 일 메서드 수
메서드 인라인 메서드 본문을 호출부에 풀어 넣고 메서드를 지운다 줄어든다
메서드 추출(Extract Method) 코드 조각을 이름 있는 새 메서드로 뽑아내고 그 자리에 호출을 둔다. 인라인의 반대 늘어난다
메서드 이동(Move Method) 메서드를 그 메서드가 주로 쓰는 데이터가 있는 다른 클래스로 옮긴다 그대로(소속 클래스가 바뀐다)
알고리즘 교체(Substitute Algorithm) 메서드 본문의 알고리즘을 같은 결과를 내는 더 명확한 알고리즘으로 통째로 바꾼다 그대로(본문 계산 방식이 바뀐다)
임시 변수 인라인(Inline Temp) 식 하나를 담을 뿐인 임시 변수를 없애고 식을 직접 쓴다 그대로(변수가 사라진다)

앞의 예를 거꾸로, getRating() 안의 _numberOfLateDeliveries > 5 를 moreThanFiveLateDeliveries() 로 뽑아내는 것이 메서드 추출이다. 코드가 어느 쪽으로 바뀌었는지(메서드가 생겼는지 없어졌는지)로 둘을 가른다.

  1. ↑ 1.0 1.1 Martin Fowler, 「Inline Function」, Catalog of Refactorings, https://refactoring.com/catalog/inlineFunction.html, 확인일: 2026-11-05.
  2. ↑ 2.0 2.1 「Inline Method」, Refactoring.Guru, https://refactoring.guru/inline-method, 확인일: 2026-11-05.