728x90

황기태 저자의 명품 C++ Programming 개정판을 읽고 학습한 내용을 정리한 포스트입니다!

https://search.shopping.naver.com/book/catalog/32436115747

 

C++ Programming : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

접근 지정자

  • OOP Language는 객체를 캡슐화하고, 외부에서 접근 가능한 공개 멤버와 외부의 접근을 허용하지 않는 비공개 멤버를 구분
  • 아래와 같은 3가지 멤버 접근 지정자(access specifier)가 있다.
  • private(비공개)
    • 클래스 내의 멤버 함수들에게만 접근이 허용
  • public(공개)
    • 클래스 내외를 막론하고 프로그램의 모든 함수들에게 허용
  • protected(보호)
    • 클래스 내의 멤버 함수와 이 클래스를 상속받은 파생 클래스의 멤버 함수에게만 접근 허용
    • 나중에 상속 다루면서 다시 설명
  • 접근 지정자는 여러 번 사용 가능하며, 다른 접근 지정자가 선언될 때까지 모든 멤버에 대해 적용

 

디폴트 접근 지정은 private
  • 접근 지정을 하지 않은 경우 디폴트 접근 지정은 private로 처리
  • => 캡슐화의 기본 원칙이 비공개 이기 때문
  • 따라서, 멤버 변수는 private로 지정 후 클래스의 생성자를 통해 멤버 변수에 접근 하는 것이 바람직 하다.
  • 또한, 생성자는 public으로 저장해야 main 문에서 호출할 수 있다.
    • 다만, 의도적으로 외부에서 객체 생성을 금지하지 위한 private
    • 자식 클래스에서만 생성자 호출 되도록하는 protected도 사용함

 


인라인 함수

함수 호출에 따른 시간 오버헤드
  • 초기 => 함수는 적절한 단위 작업을 하나의 함수로 작성하여 사용 => 프로그램을 구성하는 빌딩 블록의 역할
  • 그러나 함수의 호출에는 아래와 같이 시간 소모라는 대가가 따른다.

함수 호출에 따른 시간 오버헤드

  • 함수 호출 오버헤드는 시간이 무시할 수 없는 비중을 하지하는 경우도 있다.
  • 따라서, 짧은 코드라도 함수를 자주 호출하게 되면 실행 시간이 길어지는 원인이 되므로, 짧은 코드에서, 함수 호출 오버헤드를 줄인다면 실행속도를 개선할 수 있을 것이다.
인라인 함수
  • 짧은 코드로 구성된 함수에 대해, 함수 호출 오버헤드로 인한 프로그램의 실행 속도 저하를 막기 위해 도입된 기능
  • inline 키워드를 이용하여 선언 가능
inline int odd(int x) {
    return (x%2);
}

 

  • 컴파일러는 함수를 호출하는 곳에 인라인 함수의 코드를 그대로 삽입 => 함수 호출 xx => 실행 속도가 빨라진다.
  • c++에는 멤버 변수에 값을 쓰는 getter/setter와 같은 작은 함수를 많이 사용 => 자주 호출 되는 작은 함수들을 인라인 함수로 선언한다면 프로그램의 실행 속도를 향상시킬 수 있음.
  • 하지만, 호출하는 곳이 여러 군데 있으면 그 만큼 전체 크기가 늘어나는 단점이 있따. => code segment 크기 증가, 성능은 향상되지만, 메모리를 더 많이 잡아먹는 오버헤드가 존재 
  • 제약 사항
    • inline 선언은 컴파일러에게 주는 일종의 요청 => 강제 명령 xxx
    • 따라서, 컴파일러에 따라 재귀 함수(recursion), static 변수, 반복문, switch 문 등을 가진 함수 => 특히 긴 함수를 인라인화한다면 무시될 가능성이 있다.

 

728x90

'Programming Language > C++' 카테고리의 다른 글

[C++] 구조체  (0) 2023.11.29
[C++] priority queue with Cpp  (0) 2023.11.29
[C++] 소멸자  (2) 2023.11.29
[C++] 생성자  (1) 2023.11.27
[C++] 클래스와 객체  (1) 2023.11.27