객체지향의 주요 특성은 캡슐화, 정보은닉, 상속성, 추상화, 다형성이 있습니다. (+ 코드의 재활용)
캡슐화
캡슐화는 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 묶는 것을 말합니다. 프로그램 구현에 필요한 자료와 함수를 묶어서 외부와 단절시키고, 그 묶음을 사용하는 데 필요한 인터페이스만 외부에 공개하는 것입니다.
캡슐화를 사용하면 속성과 기능들을 컴포넌트로 재사용하기 용이하고, 인터페이스가 단순해지며, 관련있는 컴포넌트 간에 응집도가 높아진다는 장점이 있습니다.
정보은닉
캡슐화를 하게 되면 자연스럽게 클래스의 내부 속성이나 메서드를 외부에 노출하지 않게 되어 정보가 은폐되는데 이것을 정보 은닉이라고 합니다. 정보 은닉은 프로그램이 데이터에 직접 접근하지 못하게 막아줄 뿐만 아니라, 데이터 표현이 어떻게 되어 있는지에 대해 클래스 사용자가 신경쓰지 않도록 해줍니다.
(이를 위해 C++에서는 public, protected, private 같은 접근 지정자를 지정해줄 수 있습니다.)
상속성
상속성이란 부모 클래스의 멤버를 재사용하여 자식클래스에서도 사용할 수 있도록 하는 것을 말합니다. 자식 클래스는 부모 클래스의 모든 속성과 동작을 물려받고 더 필요한 기능을 추가하거나 필요없는 기능을 제거 또는 변경할 수 있습니다. 상속을 이용하면 코드를 재사용할 수 있어 시간과 노력을 절약할 수 있습니다.
추상화 (=개념화)
추상화란 객체의 효율적이고 안전한 사용을 위해 인터페이스를 설계하는 것인데, 캡슐화와 정보은닉에 의해 구현됩니다. 자식 클래스들이 공통으로 가져야하는 기능들을 묶어서 부모에 선언하되, 기능을 구현하진 않는 것을 말합니다. 추상화를 사용하면 객체는 추상적인 인터페이스를 유지하는 한도내에서 숨겨진 내부 구현을 마음대로 수정할 수 있어 기능 개선이 쉬워진다는 장점이 있습니다.
- 추상 클래스나 인터페이스를 통해 구현할 수 있다.
추상클래스 : 순수가상함수가 하나 이상 포함된 클래스
인터페이스 : 순수가상함수로만 이루어진 클래스
- 추상클래스의 특징
1. 객체화할 수 없다. (포인터 변수는 만들 수 있음)
2. 상속받은 자식에서도 순수가상함수를 재정의하지 않았다면 자식 클래스도 추상함수가 된다.
추상과 가상의 차이
가상(Virtual)은 부모에 이미 정의되어있는 기능을 자식에서 재정의하여 사용하는 것, 추상(Abstract)은 부모에 정의되어있지 않은 기능을 자식에서 정의하여 사용하는 것
다형성
다형성은 똑같은 호출이라도 상황에 따라, 호출하는 객체에 따라 다른 동작을 할 수 있는 능력을 말합니다. 다형성을 이용하면 부모 클래스 타입의 포인터를 통해 자식 클래스의 객체를 가리킬 수 있고, 이때는 동적 바인딩이 일어날 수 있도록 부모의 가상함수를 오버라이딩한 함수만을 사용해야 합니다.
실제 내부 구현이 다르더라도 개념적으로 동일한 동작을 하는 함수를 하나의 인터페이스로 호출할 수 있어, 객체들을 사용하는 코드를 일관되게 유지할 수 있다.
- 바인딩 : 함수 호출이 일어났을 때, 여러 가능한 함수 중 어떤 함수를 실행할지 결정하는 일
- 정적 바인딩 : 컴파일 타임에 함수 바인딩을 결정하는 것
- 동적 바인딩 : 런타임에 함수 바인딩을 결정하는 것
오버라이딩
오버라이딩이란 메서드 이름과 매개변수 목록이 모두 같은 상위 클래스의 메서드를 재정의하는 것을 말합니다. 상위 클래스 타입의 객체 참조 변수에서 자동으로 하위 클래스가 오버라이딩한 메소드를 호출해줍니다.
오버로딩
오버로딩이란 메서드 이름은 같지만 다른 매개변수 목록을 가지는 다수의 메서드를 중복 정의하는 것을 말합니다.
(반환 자료형이 다른것만으론 허용되지 않고, 반드시 매개변수의 타입이나 개수가 달라야 한다)
SoEn:소프트웨어 공학 연구소
www.soen.kr
캡슐화 (Encapsulation)와 정보 은닉 (Information Hiding)
캡슐화는 객체지향 프로그래밍의 가장 기본적인 기술중의 하나이다. 캡슐화의 개념과 특징에 대하여 먼저 알아본 후 캡슐화와 함께 따라다니는 정보은닉에 대하여 알아보자. 캡슐화 이것은 데
bbs.ok7cjh.com
객체 지향의 4가지 특징 OOP란 무엇일까?
객체 지향 언어의 4대 특징 1. 캡슐화 (Encapsulation) 캡슐화는 객체지향에서 데이터 구조와 데이터를 다루는 방법을 결합시켜 묶는다. 데이터를 은닉하고 그 데이터를 접근하는 기능을 노출시키지
velog.io
'👩🏻💻기초지식 > CS' 카테고리의 다른 글
| [자료구조] 배열과 리스트 (0) | 2023.08.24 |
|---|---|
| [자료구조] 큐와 스택 (0) | 2023.08.24 |
| [CS] Draw Call이란? 드로우콜의 명령 과정 (0) | 2023.08.22 |
| [CS] CPU 간단 총정리 (0) | 2023.07.31 |
| [CS] 암시적 멤버 메서드 6가지 (기본생성자, 기본소멸자, 복사생성자, 이동생성자, 복사대입연산자, 이동대입연산자) (0) | 2023.04.21 |