객체 지향 프로그래밍

태로샐러드·2021년 9월 11일
post-thumbnail

🍫 객체 지향 프로그래밍 (Object Oriented Programing)

뭔가 간단한 개념 같았지만 심오했고 막상 정의를 하려고 하니 표현을 할 수가 없었다.
이해도가 아직 깊지 않아 그런 것 같다. 그나마 다른분이 블로그에서 와닿는(직관적인) 정의를 해놓았길래 가져와봤다.

프로그래밍에서 필요한 데이터를 추상화시켜 상태(데이터)와 행위(메소드)를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법

정의 출처 : 기본기를 쌓는 정아마추어 코딩블로그

객체 지향의 전체적인 핵심 콘셉트는
데이터와 기능을 별개로 관리하지 않고 한번에 묶어서 처리한다는 점이다.

절차적 프로그래밍??

이 또한 의미는 간단해보이지만 심오한 개념인 것 같다.
공부를 더 해서 따로 이 심오한 의미를 탐구하겠지만 지금 아는 선에서 정리하자면,
절차적 프로그래밍의 핵심 콘셉트는 기본적으로 절차적(순서대로)으로 프로그래밍을 한다는 점이고, 데이터를 독립적으로 쓰면서 기능(함수)를 만들어 나간다는 점이다.

🍫 객체지향의 주요 콘셉트(특징)

Encapsulation (캡슐화)

객체 내에 데이터(속성)과 기능(메소드)를 같이 관리하여, 이 둘이 느슨한 결합을 하는 것이다.
느슨한 결합의 장점은 상태와 기능을 한 묶음으로 관리하여, 해당 객체의 모양만 보고도 어떤 상태가 있고 무슨 기능을 하는지 직관적으로 알 수 있게해준다.
또한, 이는 내부적인 상태나 기능의 수정을 용이하게 해준다.
캡슐화에서의 주요 목적은 은닉화 다. 복잡한 구현은 숨기고 작은 단위들의 인터페이스만 노출시켜 내부 데이터 등을 보호하는 것이다.

Abstraction (추상화)

이 전에도 이 주제로 포스팅 한 적이 있다. (포스팅 : 추상화와 고차함수)
추상화는 말그대로 내부 구현은 복잡한데 실제로 노출 시키는 부분은 단순화시킨다는 것이다.
복잡한 구현을 숨긴다는 점에서 캡슐화와 비슷한 맥락이긴 하지만, 추상화의 주요 목적은 복잡성을 줄이는 것이다.

Inheritance (상속)

상속은 부모 클래스(기본 클래스)의 특징을 자식 클래스(파생 클래스)가 물려받는 것이다.
동물이라는 부모 클래스가 있는데, 고양이와 강아지라는 자식 클래스를 작성한다고 치자.
고양이와 강아지는 공통적으로 동물이라는 본질을 가지고 있기 때문에, 동물이라는 부모 클래스에서 정의했던 것을 다시 일일이 정의하는 것은 비효율적일 것이다.
그래서, 이런 비효율을 방지하기 위해 기존에 정의했던 동물 클래스(부모)의 속성과 기능을 상속하는 것이다. 그러면 고양이와 강아지 각각의 자식 클래스는 그것들이 가지고 있는 고유한 기능이나 특징들만 추가하면 되는 것이다.

Polymorhism (다형성)

같은 기능(메소드)이여도 사용처에 따라 다르게 활용할 수 있다는 것이다.

마무리

개념들을 이 정도로 정리해놓긴 했지만, 아직 완전히 내 것이 된 느낌은 아니다.
객체 지향 자체의 개념과 그 특징들에 대해서는 앞으로도 공부를 계속 해나가면서 몸소 느껴봐할 것 같다.

profile
기획, 개발공부, 그 외 잡다한 여정 기록 (SEMI로)

0개의 댓글