[내일배움캠프 Day18] 인라인 함수(inline function)

2025. 1. 10. 20:57·내일배움캠프/TIL

평소 getter/setter 함수는 인라인 함수로 구현했었는데 과제를 진행하는 도중 인라인 함수로 써도 괜찮을지 의문이 들어 찾아보게 되었습니다.

 

먼저 포르잔 C++ 바이블 책에서 인라인 함수에 대해 잘 명시가 되어있어 관련 내용을 정리했습니다.

 


함수 본문이 너무 짧으면, 함수를 실행하는 시간(매개변수 저장, 제어 이동, 매개변수 추출, 리턴값 저장 등)이 함수 내부의 코드를 실행하는 시간보다 오래 걸릴 수 있습니다. 프로그램의 성능을 위해서 컴파일러가 함수 호출 부분을 실제 코드로 대체해버리게 만들고 싶을 때는 함수를 인라인 함수로 선언합니다. 물론 컴파일러가 이를 무시할 수도 있으며 인라인 함수는 필요한 곳에서 사용할 수 있습니다.

 

암묵적 인라인 함수

클래스 정의 내부에 함수를 정의하면, 해당 함수는 인라인 함수가 됩니다. 하지만 이는 2가지 이유로 추천하지 않습니다. 첫 번째로 함수 정의 부분을 읽기 어렵고, 두 번째로 캡슐화 원칙을 위반했기 때문입니다.

class Circle
{
	// 데이터 멤버
	private:
		double radius;
	// 멤버 함수
	public:
		double getRadius() const { return radius; }
	...
}

 

명시적 인라인 함수

함수 정의 앞에 inline 키워드를 추가하면 함수를 명시적 인라인 함수로 만들 수 있습니다.

inline double Circle::getRadius() const
{
	return radius;
}

 

이 책에서는 getter 함수(예시)도 클래스의 구현이 인터페이스와 섞이게 돼서 인라인 함수를 추천하지 않는다고 나와있습니다.

 

 

다음으로 Effective C++에서 항목 30에 나온 내용으로는

우선, 아무것도 인라인하지 마세요. 아니면 꼭 인라인해야 하는 함수(항목 46 참조) 혹은 정말 단순한 함수(Person::age 같은 함수)에 한해서만 인라인 함수로 선언하는 것으로 시작하십시오. 인라인을 주의해서 사용하는 버릇을 들여서, 디버깅하고 싶은 부분에서 여러분의 디버거를 제대로 쓸 수 있도록 만드시고, 정말 필요한 위치에 인라인 함수를 놓도록 하세요.
class Person{
public:	
	int age() const {return theAge;} // 암시적인 인라인 요청: age는
    ...							     // 클래스 정의 내부에서 정의되었습니다.
private:
	int theAge;
};

 

여기서는 또 인라인하지 말되 getter 정도의 단순한 함수는 인라인 함수로 써도 괜찮다고 나와있습니다.

 

 

튜터님께 질문 + 구글링한 결과 간단한 getter/setter의 경우 성능이나 유지보수성에 큰 차이가 없기 때문에, 개인의 선호도에 따라 선택하면 됩니다. 중요한 것은 프로젝트 내에서 일관성 있게 사용하는 것입니다. 

저는 원래 하던대로 인라인 함수로 구현할 것 같습니다.

 

 

추가로 과거에 inline 함수에 대해 작성한 글이 있어 첨부하겠습니다.

https://dev0404.tistory.com/12

 

[Effective C++] 항목 2: #define을 쓰려거든 const, enum, inline을 떠올리자

#define의 문제점#define은 전처리 지시문으로, 컴파일러가 코드를 읽기 전에 텍스트 치환이 이루어집니다.#define ASPECT_RATIO 1.653컴파일러는 ASPECT_RATIO라는 이름을 알 수 없고, 단지 1.653만을 인식합니

dev0404.tistory.com

 

'내일배움캠프 > TIL' 카테고리의 다른 글

[내일배움캠프 Day24] 개발 환경 설정  (1) 2025.01.20
[내일배움캠프 Day23] CH2 팀 프로젝트  (3) 2025.01.17
[내일배움캠프 Day17] C++ 빌드 과정  (1) 2025.01.09
[내일배움캠프 Day16] C++ 3주차 과제 진행  (1) 2025.01.09
[내일배움캠프 Day15] 디자인 패턴 - 구조 패턴  (2) 2025.01.09
'내일배움캠프/TIL' 카테고리의 다른 글
  • [내일배움캠프 Day24] 개발 환경 설정
  • [내일배움캠프 Day23] CH2 팀 프로젝트
  • [내일배움캠프 Day17] C++ 빌드 과정
  • [내일배움캠프 Day16] C++ 3주차 과제 진행
개발자 밍
개발자 밍
dev0404 님의 블로그 입니다.
  • 개발자 밍
    Developer
    개발자 밍
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 강의 (8)
        • UE Climbing System (3)
        • UE Dungeon (1)
        • HCI (4)
      • 책 (18)
        • 객체지향의 사실과 오해 (5)
        • Effective C++ (3)
        • 이득우의 게임 수학 (4)
        • 이것이 취업을 위한 컴퓨터 과학이다 (4)
        • 리뷰 (2)
      • C++ (2)
      • 알고리즘 (2)
      • 자료구조 (1)
      • Unreal (4)
      • 내일배움캠프 (52)
        • TIL (52)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    내일배움캠프
    컴퓨터구조
    c++
    컴퓨터 구조
    Effective
    게임수학
    그래픽스
    알고리즘
    자료구조
    언리얼
    객체지향
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
개발자 밍
[내일배움캠프 Day18] 인라인 함수(inline function)
상단으로

티스토리툴바