[CS]- 객체지향 프로그래밍 (OOP)

Sean yang~~·2023년 1월 3일
0
post-thumbnail

배경

데이터 흐름에 기반한 절차지향적 프로그래밍 방법은 복잡한 로직을 갖는 큰 규모의 소프르퉤어 개발에는 적합하지 않습니다. 하드웨어 성능이 폭발적으로 성장하면서 요구되어지는 소프트웨어는 점점 복잡해지고 거대해졌는데, 기존의 전통적인 정차지향 개발 방법으로는 소트프웨어를 설계 및 구현하는데 많은 어려움이 생긴것입니다.

이러한 문제를 해결하기 위해 함수(procedure) 단위로 나누어 구조적 프로그래밍 방법이 대두되었는데, 함수는 데이터를 처리하는 부분은 구조화할 수 있지만 데이터는 구조화하지 못해 전역 네임스페이스 포화문제를 유발하게 됩니다.(Top-down)

그리고 결과적으로 프로그램에 버그가 있는 경우 원인을 분석하는데 시간과 노력이 많이 필요해지고, 유지관리 비용이 규모에따라 대폭 증가하는 문제가 발생하게 됩니다.

객제지향 프로그래밍은 큰 문제를 작게 쪼개는 방식이 아니라 작운 문제들을 해결할 수 있는 객체들을 만든 뒤, 이 객체들을 조합해서 큰 문제를 해결하는 Bottom-up 방식을 지향합니다.

객체지향 핵심 개념

객제 지향 프로그래밍은 객체를 주된 관심으로 삼는 프로그래밍 방법론을 뜻하는 것입니다.

객체를 이해하려면 먼저 객체 지향의 핵심개념 중에 하나인 추상화라는 개념을 이해해야 합니다.

추상화(abstraction)

추상화란? 현실 시게에서 특정한 대상을 관찰하여 핵심적이고 특징적인 공통점들을 뽑아내는 과정을 말합니다.

추상화에서 핵심적인 특징이라는 것은 대상에 대한 현재 내가 구현하고자 하는 프로그램에서의 관심사하고 할 수 있습니다.

줄이고 줄여서 뽑아낸 공통적인 특징들은 크게 속성(attribute)와 행위(behaviour)로 나뉘게 되는데 이것들을 관련있는 것들끼리 묶어놓은 것을 캡슐화(encapsulation)라고 합니다.

그리고 관련있는 것들을 하나로 묶는 개념적(추상적)인 추제가 바로 클래스(class)입니다.

이 때 중요한 것은 외부에서 접근이 필요한 부분을 제외하고는 내부로 숨기는 것입니다.
알약을 먹을떄 중요한 것은 약의 성분이지 맛이나 식감이 아니기 때문에 캡슐 속으로 숨기는 것과 같다.
이렇게 외부로부터 세부적인 내용을 숨기는 것을 정보 은닉(information hading)이라고 합니다.

상속(inheritance)

상속은 객체지향의 핵심 기능 중에 하나로 대상이 되는 클래스의 모든 특징들을 물려 받는 것을 말합니다.
어떤 임의의 클래스 b가 다른 클래스 a를 상속받게 되면 a클래스의 속성과 행위들을 모두 물려받게 됩니다.
이 때 클래스 a와 b는 상속관계에 있다고 하며 클래스 a를 부모 클래스(parent class), 클래스 b를 자식 클래스(child class)라고 부릅니다.

부모 클래스로부터 특징들을 물려받게 되면 이미 구현된 세부 내용을 다시 구현할 필요가 없기 때문에 코드의 재사용성이 향상됩니다.

다형성(polymorphism)

다형성은 '여러 형채가 존재한다' 라는 뜻입니다. 객체지향에서 다형성이란 하나의 속성이나 행위가 상황에 따라 다른 의미로 해석될 수 있는 특징을 말합니다.

profile
나는 프론트엔드 개발자다!

0개의 댓글