지난 주말 수업을 받던 중 점심 먹으러 나갔다가 운이 좋게 수업 받는 곳 근처 산책로에 핀 벚꽃을 구경할 수 있었다. 그래서 참지 못하고 사진을 찍어봤다. 짜잔! 샤잠! 벚꽃 놀이는 못가도 사진은 건졌다.
만개한 벚꽃도 봤으니 그럼 오늘의 포스팅 주제로 넘어가 보자! 오늘은 저번에 정리했던 클래스의 상속과 오버라이드에 대해 알아보겠다. 오늘 정리할 내용들에 대해 언급만 간략하게 하고 넘어가자면 클래스의 속성 4가지, 그 중에서도 상속에 대한 내용과 오버라이드에 대해 정리하려고 한다. 그럼 길게 끌 것 없이 바로 GOGO!
클래스의 상속에 대해 들어가기에 앞서 클래스에는 4가지 속성이 있다는 것을 알아야한다. 추상화, 캡슐화, 상속, 다형성 이렇게 4가지가 클래스의 속성이다. 이 중에서 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것이다. 캡슐화는 연관있는 속성과 기능들을 하나의 캡슐로 만들어 내부의 데이터들을 외부의 접근으로부터 보호하려는 속성이다. 따라서 데이터 보호와 은닉에 연관된 속성이다. 후술할 상속은 부모클래스에 정의된 필드 및 메소드들을 자식 클래스에서 상속받아 사용하는 것이다. 마지막 다형성은 같은 대상이라도 문법이나 문맥에 따라 다르게 사용될 수 있다는 속성이다. 즉, 부모(상위) 클래스로 자식(하위) 클래스의 인스턴스를 생성할 수 있다는 뜻이다.
클래스의 속성에 대해 알아봤으니 이제 상속에 대해 알아보자. 상속은 아래의 구조를 갖는다.
class Cafe{
//Starbucks 클래스의 부모(상위) 클래스 역할을 할 Cafe 클래스 선언
};
class Starbucks : public Cafe{
//Starbucks 클래스가 Cafe 클래스를 상속받게 되는 순간
};
위의 형태로 클래스를 상속하면 Starbucks 클래스에서 Cafe 클래스의 필드와 메소드를 사용할 수 있게 되는 것이 클래스의 속성 중 하나인 상속이다. 상속 과정에서 자식 클래스의 이름 뒤에 접근제어자가 붙고 부모 클래스의 이름이 적히게 되는데 이때 사용하는 접근 제어자의 형태에 따라 상속받은 멤버들이 protected의 형태가 될지, public의 형태가 될지, private의 형태가 될 지 정해진다.
class Cafe{
protected:
string menu;
int order_num;
};
class Starbucks : public Cafe{
public:
void test(){
menu = "돌체 라떼";
}
};
위의 예시 코드에서는 상속 과정에서 public을 사용했으므로 상속받은 멤버들 역시 public의 형태가 된다는 것을 알 수 있다.
다음으로 알아볼 것은 오버라이드이다. 오버라이드는 상속 관계에 있는 부모클래스에서 이미 정의된 메소드를 자식 클래스에서 재정의 하는 것이다. 즉, 매개변수의 유형과 개수가 완전히 같은 메소드를 재정의하는 것이다. 이때 주의할 점은 오버라이드 할 메소드의 원형이 부모 클래스의 메소드와 정확히 일치해야한다는 것이다.
class Cafe{
public:
void menu(){ std::cout << "아이스 아메리카노" << endl;}
};
class Starbucks : public Cafe{
string menu;
public:
void menu(){ std::cout << "자바칩 프라푸치노" << endl;}
//부모 클래스의 메소드와 원형이 같으므로 오버라이드 발생!
void menu(string menu){ std::cout << "아이스 아메리카노" << endl;}
//부모 클래스의 메소드와 원형이 다르므로 오버라이드 발생 X
};
개인적인 소감으로는 2주차가 1주차 보다는 확실히 더 어려웠다. 그래도 강사님들이 친절하게 알려주셔서 어려움 속에서 조금씩 이해해 나갈수 있었다. 다가오는 3주차도 잘 해낼 수 있기를 바라며 여기까지 클래스의 상속과 오버라이드에 대한 포스팅을 마치겠다.
[포스코x코딩온] 스마트 팩토리 SW 개발자 과정 3주차 회고 | 클래스 복습(사칙연산 계산기) (0) | 2023.04.09 |
---|---|
[포스코x코딩온] 스마트 팩토리 SW 개발자 과정 3주차 회고 | 31게임, 마방진 만들기 (0) | 2023.04.09 |
[포스코x코딩온] 스마트 팩토리 SW 개발자 과정 6,7일차 회고 | 파일 입출력, 구조체, 클래스 (0) | 2023.04.01 |
[포스코x코딩온] 스마트 팩토리 SW 개발자 과정 1주차 2일차 회고 | C++ 시작하기 (0) | 2023.03.23 |
[포스코x코딩온] 스마트 팩토리 SW 개발자 과정 1주차 OT 회고 | Git Hub 시작하기 (0) | 2023.03.22 |