티스토리 뷰
[C++/Python] 객체 지향 언어란 무엇인가 : Class 상속에 관하여(PIE) | Python 상속 문제 풀이
YouJungJang 2021. 11. 27. 04:54
객체 지향의 3대 특징을 아는가?
취업 인터뷰에서 C++ 언어를 장점으로 내세운다면 반드시 듣게 되는 인터뷰 질문이다. C++ 언어의 가장 큰 특징은 '객체 지향 언어'라는 점인데, 이것이 어떤 효과를 내고 어떤 장점이 있는지 정확히 설명할 줄 알아야 C++에 대한 전문성을 증명하면서 면접관에게 좋은 인상을 줄 것이다. 그럼 그 복잡하고 어려운 특징을 어떻게 설명하면 좋을까?
-본 내용은 성신여자대학교 컴퓨터 공학과 홍의석 교수님의 파이썬 강의를 참고하여 작성했습니다.
PIE : Polymorphism Inheritance Encapsulation
객체 지향에 대한 질문을 받는다면 'PIE'를 기억하자. Pie는 Polymorphism, Inheritance, Encapsulation 세 단어의 앞 글자를 따서 만든 단어로 객체 지향 언어의 핵심을 담고 있다. 하나씩 자세히 살펴보자.
1. Encapsulation : 캡슐화
C에서 C++로 넘어오면서 class안에 멤버 변수에 'private' 키워드를 사용할 수 있게 됐다. 즉, 클래스의 멤버를 캡슐화하는 것이다. 이렇게 private으로 설정된 멤버 변수는 외부에서 함부로 접근/수정할 수 없고, class내의 멤버끼리만 접근/수정할 수 있다.(getter, setter로 해당 private 변수에 접근/수정하는 매서드를 두는 것이 일반적이다.) 이렇게 캡슐화함으로써 '보안'과 '데이터 무결성'을 보장할 수 있다.
[ Class에 private 멤버 변수를 사용한 C++ 예제 ]
#include <vector>
#include <iostream>
#include <string>
using namespace std;
class Person {
private: string name; //private으로 설정된 멤버변수 Name
public:
Person(string name): name(name){}
void setName(string name) {
this->name = name;
}
string getName() {
return this->name;
}
};
[ Class에 private 멤버 변수를 사용한 Python 예제 ]
class Person:
def __init__(self, name):
self.__name= name //파이썬에서 private 멤버는 변수명 앞에 '__'를 쓰면 된다.
def setName(self, name):
self.__name= name
def getName(self):
return self.__name
2. Inheritance : 상속
클래스 상속은 실사용과 응용에서 유용하게 쓰이는 것으로 객체 지향의 대표적인 특징 중 하나이다. 말 그대로 자식 클래스는 부모 클래스를 상속함으로써 부모의 멤버변수, 멤버 매서드를 모두 상속받아 그대로 사용할 수 있다. 이를 통해 불필요한 코드의 반복을 줄일 수 있고, 코드를 보다 체계적으로 구현할 수 있다.
[상속을 활용한 Python 예제]
class Address:
def __init__(self, street, city):
self.street = str(street)
self.city= str(city)
class Person:
def __init__(self, name, email):
self.name= str(name)
self.email= str(email)
class contact(Address, Person):
def __init__(self, name, email, street, city, phone):
Address.__init__(self, street, city)
Person.__init__(self, name, email)
self.phone = str(phone)
def __str__(self):
return "name: "+self.name +'\nemail: ' + self.email + '\naddress: '+ self.city + ' '+ self.street + '\nphone: '+ self.phone
sungshin= contact('이성신', '20191004@sungshin.ac.kr', '고려대로', '서울시', '010-1111-1111')
print(sungshin)
contact 클래스는 자식 클래스로 주소 정보를 담는 Address와 개인 정보를 담는 Person 클래스 두 개를 모두 상속하고 있다. contact의 생성자는 각 부모 클래스의 멤버 변수를 초기화할 매개 변수를 모두 가지고, 생성자 내부에서 각 부모 클래스의 생성자를 호출하여 인자를 대입한다.
3. Polymorphism : 다형성
2번 상속과 3번 다형성은 이어지는 특징인데, 상속이라는 특성으로 발생한 것이 다형성이라고 할 수 있다.
'Study > C++' 카테고리의 다른 글
[C++] 백준 #13305번 주유소 17점/100점 문제 풀이 (Greedy Algorithm) (0) | 2022.06.05 |
---|---|
[C++] 문자열을 효율적으로 다루는 방법: String & Map / 신고 결과받기 풀이(2022 카카오 코딩테스트) (0) | 2022.05.01 |
[C++] Vector Container 에 관하여 (0) | 2021.11.14 |
[C++] 우선 순위 큐(Priority Queue) / 힙(Heap) : 프로그래머스 스코빌 지수(Scoville) 문제 풀이 (0) | 2021.10.23 |
[Algorithm/C++] 완전 탐색 (Brute-force Search): 백준 2309번, 프로그래머스 모의고사 문제 풀이 (0) | 2021.10.09 |