클래스 인라인하기(Inline Class)는 작은 클래스를 효율적으로 사용하기 위한 리팩터링 기법 중 하나입니다. 클래스 인라인하기는 클래스의 모든 기능을 클래스의 사용처에 삽입하여 호출하는 비용을 줄이는 방법입니다.
해당 리팩터링은 클래스 추출하기(Extract Class) 와 반대되는 리팩터링입니다.
클래스 인라인하기를 적용하면, 작은 클래스를 사용할 때 클래스를 생성하는 비용이 줄어들기 때문에, 성능 개선에 효과적입니다.
하지만 클래스의 크기가 너무 크거나 복잡한 경우에는 오히려 가독성이 떨어질 수 있으므로 주의해야 합니다.
클래스 인라인하기를 적용하는 방법은 다음과 같습니다.
- 클래스의 기능을 호출하는 모든 코드를 찾습니다.
- 클래스의 기능이 호출되는 곳으로 이동하여, 클래스의 기능을 호출하는 코드를 모두 제거합니다.
- 클래스의 모든 필드와 메서드를 호출하는 코드가 있는 위치에 인라인합니다.
클래스 인라인하기는 다음과 같은 상황에서 적용할 수 있습니다.
- 클래스의 인스턴스 생성 비용이 높은 경우
- 클래스의 기능이 매우 단순한 경우
- 클래스의 기능이 자주 사용되는 경우
하지만 클래스 인라인하기를 적용할 때에는 다음과 같은 점을 고려해야 합니다.
- 클래스의 크기가 너무 크거나 복잡한 경우 가독성이 떨어질 수 있음
- 클래스의 기능이 바뀌는 경우 모든 호출되는 코드를 수정해야 함
- 클래스의 기능을 여러 곳에서 사용하는 경우 코드 중복이 발생할 수 있음
클래스 인라인하기는 성능 개선에 효과적인 방법이므로, 작은 클래스에서 적극적으로 활용할 수 있습니다.
하지만 클래스의 크기와 기능에 따라서 적용할지 말지 결정해야 합니다.
다음은 클래스 인라인하기(Inline Class)를 적용하기 전의 예제 코드입니다.
Class TelephoneNumber
{
public:
int GetAreaCode()
{
return areaCode;
}
int GetNumber()
{
return number;
}
pviate:
int areaCode;
int number;
};
Class Person
{
public:
int GetOfficeAreaCode()
{
return officeTelephoneNumber.GetAreaCode();
}
int GetOfficeNumber()
{
return officeTelephoneNumber.GetNumber();
}
pviate:
TelephoneNumber officeTelephoneNumber;
};
Person 클래스 내부에서 officeTelephoneNumber라는 TelephoneNumber 클래스의 인스턴스를 가지고 있습니다.
해당 코드를 클래스 인라인 적용하면 다음과 같습니다.
Class Person
{
public:
int GetOfficeAreaCode()
{
return officeAreaCode;
}
int GetOfficeNumber()
{
return officeNumber;
}
pviate:
int officeAreaCode;
int officeNumber;
};
TelephoneNumber 클래스를 제거하고, 필드를 바로 Person 클래스 내부에 추가하여 통합했습니다.
이렇게 클래스 인라인 기법을 사용하면 클래스의 수를 줄이고 코드의 가독성과 유지보수성을 높일 수 있습니다.
'리팩터링 > 리팩터링 기법' 카테고리의 다른 글
리팩터링 기법. 타입 코드를 서브클래스로 바꾸기(Replace Type Code with Subclasses) (0) | 2023.04.02 |
---|---|
리팩터링 기법. 기본형을 객체로 바꾸기(Replace Primitive with Object) (0) | 2023.04.01 |
리팩터링 기법. 함수 인라인(Inline Function) (0) | 2023.03.23 |
리팩터링 기법. 필드 옮기기(Move Field) (0) | 2023.03.22 |
리팩터링 기법. 클래스 추출하기(Extract Class) (0) | 2023.03.20 |