• 객체지향의 개념

    • 등장 이유 : 절차 지향의 의존성을 줄이기 위해서. 프로그램을 더 체계적으로 세밀하게 분할하여 각각의 파트가 서로 영향을 주지 않는다는 원칙을 제시, 의존성 감소
  • 인터페이스

    • 코드 재사용성을 높이고 오류 발생 가능성을 줄임
    • 프로그래머간 소통이 아닌 객체 간 소통만 진행하므로 의존성 문제를 줄일 수 있음
  • 상속

    • 프로그래머간 소통이 아닌 객체 간 소통만 진행하므로 의존성 문제를 줄일 수 있음
    • 중복된 노동을 줄임
  • 객체지향의 장단점

    • 장점
      • 다양한 문제들에 대해 강력하고 자연스러운 접근 가능
      • 상속을 통해 이미 구현된 객체를 재사용할 수 있고, 프로그램 수정이 쉬워짐
    • 단점
      • 전통적인 프로그래밍 기법보다 개념적으로 어려움
      • 객체지향 프로그램은 효율성이 좋지 않음
  • Private 영역, Public 영역

    • private : 객체의 프라이빗 영역은 변수나 함수 등을 포함하며, 외부로부터의 접근이 불가능
    • public : 퍼블릭 영역 역시 선언된 펑션들이 존재하며, 퍼블릭에 선언된 인터페이스를 통해 외부로부터의 접근이 가능
  • Friend 함수

    • 클래스의 멤버는 아니지만 이 함수에서 클래스를 통해 나오는 객체들을 입력 파라미터로 받아왔을 때 입력 파라미터로 받아온 데이터에 엑세스를 할 수 있도록 허용해주는 함수
  • Inline 함수

    • 코드 작성할 때는 함수 형태로 작성을 하지만 실제로 컴파일 할 때는 그 함수가 호출된 자리에 우리가 만들어 놓은 함수 코드가 그게 그대로 박혀 들어감. 즉, 함수 버전으로 안 만들고 메인에다가 쫙 구현해 놓은 그런 형태로 동작

    • 목적

      • 런타임 펑션 콜에서 깎아먹는 성능이 안 좋은 지점을 효과적으로 improve 시키는 목적으로 사용
    • 장점 :

      • 실제로 바이너리 코드를 실행할 때도 펑션 콜이 없어지므로 수행 속도가 더 빨라짐
      • 보기가 더 편하고 유지보수 관점에서 유리
    • 단점 :

      • 자주, 많이 호출할 시 바이너리 사이즈 더 커짐
      • 코드가 모두 별개로 나누어져 있어 캐싱의 이점을 가져갈 수 없음
      • 재귀함수 안됨
      • 컴파일 오버헤드
  • 연산자 오버로딩으로 바꾸지 못하는 것들

    • 우선순위, 연관성, 대체성, 사용 양식
  • Static data member

    • 같은 클래스로 만들어진 객체들이 공유해서 사용하는 데이터가 필요한 경우
  • Structure와 class의 차이점

    • Structure 는 상속이 안되고, 기본 접근 제어자가 public