CS/공통

OOP

ShovelingLife 2022. 6. 22. 12:43

OOP란?? (Object Oriented Programming)

C++는 객체지향 언어이고 해당 언어를 OOP라고 부르며 Object Oriented Programming의 약자다. 컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

  1. Class (클래스) / Object (객체)
  2. Abstraction (추상화)
  3. Encapsulation (캡슐화)
  4. Inheritance (상속성)
  5. Polymorphism (다형성)

장점

  • 코드 재사용이 용이 (남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있다.)
  • 유지보수가 쉬움 (절차 지향 프로그래밍에서는 코드를 수정해야할 때 일일이 찾아 수정해야하는 반면 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 된다. )
  • 대형 프로젝트에 적합 (클래스 단위로 모듈화시켜서 개발할 수 있으므로 대형 프로젝트처럼 여러 명, 여러 회사에서 프로젝트를 개발할 때 업무 분담하기 쉽다.)

단점

  • 처리 속도가 상대적으로 느림.
  • 객체가 많으면 용량이 커질 수 있음.
  • 설계시 많은 시간과 노력이 필요.

1. Class (클래스) / Object (객체)

클래스 : 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것으로 객체를 만들기 위한 메타정보라고 볼 수 있다.

객체 : 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터

2. Abstraction

추상화는 추상 클래스나 추상 클래스가 갖는 추상 메서드를 의미하기보다는 클래스를 설계하는 것 자체를 의미한다. 즉, "공통의" 속성이나 기능을 묶어 이름을 붙이는 것이다.

3. Encapsulation

외부로부터의 노출을 최소화하기 위해(오류를 최대한 줄이기 위한 용도) 클래스에 정의된 맴버 변수들을 감싼다.

접근자로는 세 개의 키워드가 존재한다.

  1. private : 자기 클래스 내에서만 접근 가능.
  2. protected : 자신 포함 자식 클래스 까지 접근 가능.
  3. public : 어디서든 접근 가능.

4. Inheritance

상속의 가장 큰 특징은 코드 재사용다. 사람, 고양이, 개, 돌고래, 새 등.... 동물과 관련된 클래스를 만들어 본다고 가정하고 해당 클래스마다 모두 일일이 고유의 독자적인 클래스를 만드는 것보단 눈, 코, 입, 호흡 등 과 같은 공통적인 특징을 하나의 클래스로 정의하고 그 클래스를 상속받으면서 재사용하면 그 만큼 효율적인건 없다.

5. Polymorphism

다형성이란 무엇일까?? 사전에는 다음과 같이 나와있다. "여러가지 형태가 존재한다."
겉보기엔 하나인것 처럼 보이는데, 동작은 상황에 따라 달라질 수 있다는 점 즉, 동일한 요청임에도 다르게 응답하는 것이다.
크게 2가지로 나뉜다.
  1. Compile Time (Static 정적)
  2. Run Time (Dynamic 동적)

C++과 C#간의 OOP 차이가 존재하기 때문에 코드는 따로따로 분리.

출처 : https://hwan-shell.tistory.com/226

출처 : https://jeong-pro.tistory.com/m/95