사냥꾼의 IT 노트

C++ 필기 노트 #8 클래스와 생성자 본문

C++

C++ 필기 노트 #8 클래스와 생성자

가면 쓴 사냥꾼 2022. 4. 20. 10:14

1. 타입과 인스턴스

  • 타입: 추상화된 것
  • 인스턴스: 실체화한 구체적인 실체
  • 속성: 인스턴스가 가지는 특징
  • 행위: 어떤 인스턴스가 스스로 할 수 있는 작업 또는 연산

2. 클래스와 객체

C++은 클래스라는 구문을 사용해 타입을 만들고, 클래스를 기반으로 객체(인스턴스)를 만듬

  • 데이터 멤버: 속성을 표현하기 위한 변수
  • 멤버 함수: 객체가 행할 수 있는 어떤 행위

3. 객체 지향과 클래스

  1. 클래스 정의: 속성과 행위 선언
    • 데이터 멤버 선언
    • 멤버 함수 선언
    • 접근 제한자 (기본적으로 private)
  2. 멤버 함수 정의: 행위 정의
  3. 애플리케이션: 객체를 인스턴스화하고 사용
    • 객체 인스턴스화
    • 객체에 연산 적용
    • 멤버 선택

4. 생성자

객체를 생성하는 특별한 멤버 함수이며, 별도의 괄호가 없어도 호출됨

  • 리턴값이 없음
  • 이름이 클래스의 이름과 같음
  • consta 한정자를 붙일 수 없음

5. 소멸자

  • 클래스 이름 앞에 ~가 붙은 형태
  • 리턴값이 없음
  • 자동적으로 호출됨 (객체가 스코프를 벗아나는 등)

6. 필수 멤버 함수

  1. 매개변수가 있는 생성자/그룹 생성자: 둘 다 만들지 않으면, 시스템은 합성 기본 생성자를 생성함 -> 쓰레기 값으로 초기화
  2. 복사 생성자: 만들지 않으면 시스템이 합성 복사 생성자를 생성함
  3. 소멸자: 만들지 않으면 시스템이 합성 소멸자를 생성

7. 인스턴스 데이터 멤버

인스턴스의 속성을 정의함 -> 인스턴스끼리 접근할 수 없음 (일반적으로 private으로 설정)

 

8. 인스턴스 멤버 함수

인스턴스의 행위를 의미하며, 객체의 인스턴스 데이터 멤버를 조작하기 위해 사용 -> 종류별로 하나만 메모리에 올라감 (일반적으로 public 접근 제한자로 설정)

  • 객체 지향 프로그래밍의 애플리케이션 부분에서는 인스턴스를 생성하고, 그 인스턴스가 인스턴스 멤버 함수를 호출하게 해 인스턴스가 스스로 동작하는 것처럼 코드를 작성함 -> C++은 이를 위해서 멤버 선택 연산자로 2개의 연산자를 제공
  • 락킹과 언락킹: 여러 객체가 하나의 멤버 함수를 공유하기 위한 방법 -> this 포인터 사용

9. 접근자 멤버 함수 (getter)

호스트 객체의 정보를 추출할 때 사용하는 함수로, 함수 끝에 const 한정자를 추가하는 게 좋음

 

10. 설정자 멤버 함수 (setter)

호스트 객체의 상태를 변경하는 인스턴스 멤버 함수 -> 데이터 멤버의 값을 변경

 

11. 클래스 불변 속성

클래스의 데이터 멤버의 일부 또는 전체에 적용해야 하는 하나 이상의 조건으로, 설계적으로 지켜야 하는 조건

 

12. 정적 데이터 멤버

클래스 또는 모든 인스턴스에 포함되는 멤버

  • 정적 데이터 멤버 선언: 클래스 정의에서 선언해야 하고 static이라는 키워드를 붙여야 함
  • 정적 데이터 멤버 초기화: 클래스 정의에서 초기화 해야 하며, 클래스 이름과 ::(클래스 스코프 연산자)를 추가해서 클래스에 속한다는 것을 나타내야 함

13. 정적 멤버 함수

정적 데이터 멤버는 일반적으로 private이므로 이에 접근할 수 있는 public이 적용된 멤버 함수가 필요함 -> 객체를 따로 선언하지 않아도 클래스 이름을 통해 사용 가능

  • 정적 멤버 함수 정의: 인스턴스 멤버 함수처럼 클래스 외부에서 정의
  • 정적 멤버 함수 호출: 인스턴스 또는 클래스를 통해서 호출 가능