티스토리 뷰

 

객체 지향의 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번 다형성은 이어지는 특징인데, 상속이라는 특성으로 발생한 것이 다형성이라고 할 수 있다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함