[포스코x코딩온] 스마트 팩토리 과정 2주차 회고 | C++개념정리2
클래스 기본개념
객체 지향 프로그래밍
- 필요한 데이터와 코드를 묶어 하나의 객체로 만들고 이 객체들 간에 상호작용을 하도록 프로그램을 만드는 방식
- 실제 세계를 모델링하여 소프트웨어를 개발함
- 코드 재사용과 유지보수가 용이하지만 처리속도가 절차 지향 프로그래밍보다 느리고 설계가 복잡하다.
추상화, 캡슐화, 상속, 다형성
- 추상화란 객체의 공통적인 속성과 기능을 추출하여 정의하는 것이다.
- 캡슐화란 연관 있는 속성과 기능들을 하나의 캡슐로 만들어 내부의 데이터들을 외부로부터 보호하고 은닉하는 것이다.
- 상속이란 부모클래스에 정의된 변수와 메서드를 자식클래스에서 상속받아 사용하는 것이다.
- 다형성이란 모습은 같은데 형태는 다른 것을 의미하며 부모클래스로 자식클래스의 인스턴스를 생성할 수 있다는 것이다.
구조 : 필드, 메소드, 생성자(소멸자)
- 필드는 객체가 갖는 값을 의미하고 메소드는 객체의 기능을 의미한다.
- 생성자는 객체를 생성할 때 자동으로 호출되는 함수이다.
- 소멸자는 함수가 끝나거나 프로그램이 종료되면서 객체가 소멸하는 시점에 자동으로 호출되는 함수이다.
접근 제어자
- public은 어디서나 접근 가능하다.
- private은 자기 자신 즉, 해당 클래스 내에서만 접근 가능하다.
- protected는 자기 자신과 자식 클래스 내에서만 접근 가능하다.
getter, setter
- 클래스 외부에서 private 변수에 접근할 수 있도록 도와주는 메소드이다.
- getter은 변수를 반환해주는 메소드이고 setter은 변수에 값을 할당해주는 메소드이다.
static 멤버
- static(정적) 멤버란 클래스에는 속하지만 객체 별로 할당되지 않고 클래스의 모든 객체가 공유하는 멤버이다.
클래스의 상속과 관련된 개념
- 클래스 상속이란 부모 클래스에 있는 변수와 메소드 등 멤버를 자식 클래스에서 물려받아 사용할 수 있게 되는 것이다.
- 공통점을 묶어서 한번에 유지보수하기 편하며 경제적이다.
- 부모의 속성을 여러 자식에서 공통적으로 사용할 수 있지만, 자식마다 다른 속성을 가질 수도 있으며, 이를 다형성이라 한다.
접근제어자 protected
- 해당 클래스 메소드와 상속을 받을 자식 클래스에서만 접근이 가능하다.
오버라이딩 (오버로딩과 비교)
- 오버라이딩은 부모클래스에서 이미 정의된 메소드를 자식 클래스에서 다시 정의하는 것이고, 오버로딩은 같은 이름의 함수를 중복하여 정의하는 것이다.
- 오버라이딩은 상속 관계에서의 개념이지만 오버로딩은 클래스에 국한된 개념이 아닌 기본 문법이다.
- 오버라이딩은 매개변수의 유형과 개수 등 함수의 원형이 완전히 같아야 하지만 오버로딩은 함수 이름만 같아도 된다.
업캐스팅, 다운캐스팅
- 업캐스팅이란 자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것이다. 즉, 부모 클래스의 포인터로 자식 클래스 객체를 가리키는 것이다.
- 다운캐스팅이란 업캐스팅된 것을 다시 원상태로 돌리는 것이다.
가상 함수
- 가상함수란 부모 클래스에서 자식클래스가 재정의할 것으로 기대하고 정의해 놓은 함수이다.
- 포인터나 참조를 통해 호출될 때만 런타임에 어떤 함수를 호출할 것인지 결정하는 동적 바인딩을 한다.
다형성을 실현하는 경우는?
- 부모 클래스로 자식 클래스의 인스턴스를 생성하는 경우
- 즉, 자식 클래스를 가리키는 포인터를 부모 클래스 포인터로 선언할 수 있다.
추상 클래스
- 추상 클래스란 추상 메소드(순수 가상 함수)를 한 개 이상 가지고 있는 클래스이다.
추상 메소드(순수 가상 함수)
- 추상 메소드(순수 가상 함수)란 함수의 원형만 존재하고 내용이 없는 메소드이다.
- virtual void func() = 0; 형식
추상 클래스의 특징은?
- 추상 클래스로는 인스턴스를 생성할 수 없다.
- 추상 클래스를 상속받은 자식 클래스는 추상 메소드를 모두 구현해야 하며, 구현하지 않으면 자식 클래스도 추상 클래스가 된다.