본문 바로가기

C++

C++ 배우기 19(객체지향프로그래밍, class)

객체지향 프로그래밍(OOP)

object-oriented programming의 줄임말이다. 

프로그램 설계 방법 중 하나로, 명령형 프로그래밍에 속한다. 여기서 객체란, 함수(메서드)와 변수(데이터)의 묶음을 말하며, 이 객체들의 역할을 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것이라고 한다.

 

아래와 같이 만들었던 구조체 Card 같은 것들이 객체지향 프로그래밍이라 할 수 있다.

struct Card
{
    int num;
    string shape;

    void Print()
    {
        switch (num)
        {
        case A:
            cout << shape << "A" << "\t";
            break;
			.
			.
			.
            break;
        }
    }
};

객체지향 프로그래밍의 특징

캡슐화(encapsulation)

객체가 독립적으로 역할을 할 수 있게 변수(데이터)와 함수(메서드)를 하나의 단위로 묶어 관리하는 것이다.

클래스를 통해 구현되고, 해당 클래스 안에 포함된 멤버 변수와 함수에 접근하기 편하다.

또한 감추고 싶은 정보는 외부로부터 감출 수 있고(private), 노출시켜도 되는 정보는 누구든 접근시킬 수 있다(public).

class Card
{
//은닉
private:
    string shape;
	int num;
//공개
public:
	void Print()
    {
    	.
        .
        .
    }
};

 

상속(inheritance)

자식 클래스가 부모 클래스의 특성(함수, 변수)과 기능을 그대로 물려받는 것을 말한다.

객체들 간의 관계를 구축하는 방법이라고 할 수 있다.

이는 기존의 코드를 재활용하여 사용할 수 있다는 장점이 있다.

class Parents
{
	.
	.
	.
};

//Parents로부터 상속받은 Child
class Child : public Parents
{
	.
	.
	.
};

 

추상화(Abstraction)

객체들의 공통적인 특징을 묶어 정의한 클래스의 선택된 특성 또는 메서드와 상호작용하는 것을 의미한다.

따라서 불필요한 부분을 생략하고 객체의 가장 중요한 속성에만 중점을 둘 수 있어, 코드의 재사용성, 가독성을 높인다.

 

다형성(polymorphism)

하나의 변수 또는 함수가 상황에 따라 다른 의미로 해석될 수 있는 것을 말한다.

대표적으로 함수 오버 로딩처럼 동일한 이름의 함수들이 서로 다른 방법으로 동작하는 것이다.

- 오버 라이딩(overriding) : 부모 클래스의 메서드와 같은 이름을 사용하며 매개변수도 같지만 내부 소스를 재정의하는 것

- 오버 로딩(overloading : 같은 이름의 함수가 여러 번 정의됐지만 매개변수를 다르게 하여 사용하는 것

 

다형성도 서브타입 다형성 / 매개변수 다형성 / 임시 다형성 / 강제 다형성과 같이 여러 종류가 있다.

 

정보은닉(information hiding)

프로그램의 세부 구현을 외부에 드러나지 않도록 하는 것을 말한다.

내부 구현은 감추고 외부 노출은 최소화해서 유연함과 유지보수성을 높기는 개념이다.

일반적으로 세 종류의 접근 제한이 있다.

  • public : 클래스의 외부에서 사용 가능하도록 노출시킴
  • protected : 다른 클래스에게는 노출되지 않지만, 상속받은 자식 클래스에게는 노출됨
  • private : 클래스의 내부에서만 사용되어 외부로 노출되지 않음

앞서 봤던 캡슐화의 특징인 선택한 정보만 노출시킬 수 있는 개념과 비슷하다고 하지만 그렇다고 정보은닉이 캡슐화인 것은 아니다.


클래스(class)

사용법은 구조체 struct와 비슷하다.

class Card
{
private:
	int a;
public:
	void Main()
	{
    
	};
};

위처럼 접근 제한자가 private인 변수 a일 경우, 외부에서 접근할 수가 없어 정보 은닉이 가능하다.

반대로 public인 Main() 함수는 외부에서 접근이 가능하다.

 

private, public과 같은 접근 제한자를 꼭 넣을 필요는 없다. 기본적으로 접근 제한자가 정해져있기 때문이다.

클래스(class)는 기본적으로 private의 접근제한자를 가지고 있어서 정보 은닉 방면에서 사용하기 좋지만,

구조체(struct)는 public 접근제한자를 기본으로 두고 있어서 외부에서 접근이 쉽다는 특징이 있다.

 

보통 private는 외부에서 접근하지 못하게 해서 변경하면 안 되는 변수, 함수 등에 사용을 한다고 하는데, const 상수처럼 

바뀌면 안되는 것들에 사용하면 될 것 같다.


참고 자료

https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

객체 지향 프로그래밍 - 나무위키

프로그램의 세부 구현을 외부로 드러나지 않도록 특정 모듈 내부로 감추는 것이다. 내부의 구현은 감추고 모듈 내에서의 응집도를 높이며, 외부로의 노출을 최소화하여 모듈 간의 결합도를 떨

namu.wiki

 

http://www.incodom.kr/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5

 

생물정보 전문위키, 인코덤

Wikipedia for Bioinformatics

www.incodom.kr

 

https://xangmin.tistory.com/152

 

객체 지향 4가지 특징과 5가지 원칙

객체지향 이란? • 객체지향 프로그래밍 (Object Oriented Programming, OOP)이란? - 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고객체들 간의 유기적인 상호작용을 통해 로직을 구성하

xangmin.tistory.com

 

https://sunrise-min.tistory.com/entry/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%98-%ED%8A%B9%EC%A7%95

 

OOP 객체 지향 프로그래밍의 특징

객체 지향 프로그래밍 Object Oriented Programming(OOP) 란? 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는

sunrise-min.tistory.com

 

https://effectiveprogramming.tistory.com/entry/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EC%A0%95%EB%B3%B4-%EC%9D%80%EB%8B%89information-hiding%EC%97%90-%EB%8C%80%ED%95%9C-%EC%98%AC%EB%B0%94%EB%A5%B8-%EC%9D%B4%ED%95%B4

 

객체지향의 올바른 이해 : 5. 정보 은닉(information hiding)

우리가 어떻게 해서 유연성을 확보할 수 있었는가?그것은 추상화(Abstraction)에서부터 시작되었다. 추상화를 통해 우리는 여러 요구사항들 중에서 공통점을 찾고, 이 공통점에서 목표한 것과 관련

effectiveprogramming.tistory.com