객체지향이란?
객체는 우리가 object라 불리며 사물을 나타내는 추상적인 개념입니다.
지향은 말 그대로 어디로 향한다는 말인데요, 객체를 향하여 무슨 뜻일까요? 모든 것을 객체로 만든다는 것입니다.
집이라는 사물이 있습니다. 이 집을 이루는 방, 소품, 침대, 책장 기타 등등 집이라는 객체를 이루고 있는 것들 또한 객체를 말하는 것입니다. 객체를 통해서 새로운 객체를 생성하고, 객체를 변형하기도 하는 것이 객체 지향이 아닐까요?
🔻객체 지향 이전의 프로그래밍 방식
이전 프로그래밍 방식은 구조적 프로그래밍이라 불렸습니다.
구조적 프로그래밍은 코드의 흐름이 한방향으로 흐르기 때문에 순차적, 하향식, 폭포수방식이라고 불렀으며, 단위는 함수 단위였습니다.
잘 생각해 보면 우리가 작성한 코드들이 여기에 해당되는 게 아니었을까요?
그렇다면 왜 구조적 프로그래밍에서 객체지향 프로그래밍 방식으로 바뀌고 있는 걸까요? 이유는 순차적으로 코드가 작성되다 보니 중간에 에러가 발생을 한다면 수정을 하는 게 어려워집니다. 운 좋게 한 부위만 바꿨는데 코드가 동작하면 다행이지만, 대게 코드는 코드끼리 얽혀있기 때문에 하나가 문제가 발생하게 되면 아래의 코드들에도 문제가 생겼을 확률이 있습니다. 때문에 구조적 프로그래밍은 작업을 할 때 설계단계부터 꼼꼼하게 진행을 해야만 했는데요. 이런 단점을 보완하고 나온 게 바로 객체지향 프로그래밍 방식입니다.
객체지향 프로그래밍 방식은 기능단위가 객체이고, 객체이기 때문에 결합과 분리가 쉬워 유연합니다. 대표적으로 이벤트 기반의 윈도 프로그램들이 있습니다.
객체지향 프로그래밍의 특징 4가지
첫 번째, 추상화
추상화는 하나의 객체로 만들려는 것들의 공통적인 특징을 뽑아서 만든 것을 의미합니다.
추상화는 어떻게 보면 스무고개랑 비슷하지 않나 생각이 듭니다.
예를 들어서 "사람"의 특징을 생각해 봅시다.
눈이 몇 개인가요? 두 개죠, 코는 한 개입니다. 귀도 두 개이고, 자웅동체인가요?. 사람들은 다 안경을 쓰나요? 안 쓰는 사람도 있고 쓰는 사람도 있습니다. 몇 족 보행을 하나요? 2족 보행을 합니다. 날개가 달렸나요? 안 달렸습니다.
이렇게 특징을 나열을 한 다음에 공통적인 부분만 뽑아봅시다.
눈과 코, 귀, 성별존재, 이족보행, 날개가 없음 > 이런 식으로 사물의 공통된 특징만을 나열을 했을 때 아무것도 모르는 사람이 이걸 듣고 사물을 떠올릴 수 있는가? 이게 추상화입니다.
두 번째, 캡슐화
우리가 약국에서 받는 캡슐형 알약과 같은 형태를 말하며 캡슐 안에 약을 숨기듯이 객체의 데이터를 숨겨놓고 외부에서 접근을 할 수 없게 만드는게 캡슐화 입니다. 이렇게 하면 캡슐화 끝인가요? 아니죠 캡슐화에는 외부에서 접근을 막는것도 있지만, 정작 코드를 작성하는 우리는 숨겨놓은 데이터를 이용을 해야하잖아요 그래서 숨겨진 데이터를 조작을 하는 인터페이스까지 존재해야 진정한 캡슐화라고 할수 있습니다. 즉, 캡슐화는 데이터를 숨기는 것 + 숨겨진 데이터에 일반인은 접근할 수 없지만 코드를 짜는 우리는 접근할수 있게 만드는 인터페이스가 있는가? 까지입니다.
세 번째, 상속성
현실에서도 상속이라 하면 부모가 자식에게 무언가를 넘겨줄 때 상속한다 하는 것처럼 객체도 부모객체에서 자식객체로 데이터를 넘겨줄 수 있는데 이를 상속성이라고 합니다. 그리고 이렇게 상속이 될수록 사물은 더 다양한 정보를 얻어 객체는 점점 구체화 되게 됩니다.
네 번째, 다형성
다형성이 어떤 뜻이냐면 같은 함수명이어도 전달인자 개수나 타입에 따라서 구분이 되는 것을 말하는데요, 대표적으로 오버로딩과 오버라이딩이 존재합니다.
'프로그래밍📚' 카테고리의 다른 글
오버로딩과 오버라이딩 (0) | 2024.02.05 |
---|---|
사용자 정의 타입이란? - interface (0) | 2024.02.05 |
사용자 정의 타입이란? - class (0) | 2024.02.05 |
사용자 정의 타입이란? - 공용체와 enum (0) | 2024.02.05 |
사용자 정의 타입이란? - 구조체 (0) | 2024.02.05 |