본문 바로가기
Base/OOP

객체지향 프로그래밍이란

by yoon_seon 2023. 5. 11.

알고 있지만 막상 설명할 수 없는 기본 개념을 정리하기 위해 포스팅을 하게 되었다.

 

📌 객체지향 프로그래밍 :: OOP

객체지향 프로그래밍(Object-Oriented Programming)은

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

 

* 객체 : 현실에 무언가를 추상적으로 표현한 것

 

📌 OOP의 특징 

1. 추상화

클래스들의 공통적인 특성(변수, 메서드)들을 묶어서 표현하는 것

 

2. 캡슐화

데이터 구조와 데이터를 다루는 방법들을 하나의 캡슐 형태로 결합시켜 데이터와 코드의 형태를 외부로부터 알 수 없게 하는 것

 

3. 상속

상위 요소의 특징을 하위 요소가 물려받는 것

 

4. 다형성

하나의 변수명, 함수명 등이 상황에 따라 다양한 형태로 표현이 가능한 구조

 

 

📌 SOLID 원칙 :: 객체지향설계 5대 원칙

1. SRP : 단일 책임 원칙

클래스를 변경하는 이유는 단 하나로, 클래스는 단 한 개의 책임을 가져야 한다.

 

2. OCP : 개방-폐쇄 원칙

확장에는 열려있고 변경에는 닫혀있어야 한다. 즉, 기존 코드를 변경하지 않고 기능을 추가 및 수정할 수 있어야 한다.

 

3. LSP : 리스코프 치환 원칙

하위타입 객체는 상위타입 객체에서 가능한 행위를 수행할 수 있어야 한다. 즉, 상위타입 객체를 하위타입 객체로 치환해도 정상적으로 동작해야 한다.

 

4. ISP :  인터페이스 분리원칙

사용에 맞게 인터페이스를 분리하여 사용해야한다.

 

5. DIP : 의존성 역전 원칙

의존성이 추상에 의존하며 구현체에 의존하지 않는다.

 

 

📌 OOP의 특징을 현실세계에 비유한 예시

OOP의 특징을 잘 이해하기 위해 현실세계에 빗대어 생각해 보았다. 

예를 들어 아이폰이라는 물체를 추상화한다면 [아이폰 → 휴대폰 → 통신기기 → 전자제품]으로 추상화할 수 있다.

하지만 추상화를 할수록 객체의 디테일함이 사라지고 공통된 특징만 남게 되기 때문에 추상화를 너무 심하게 하면 본래의 형태가 떠오르지 않을 수 있다.

 

그럼 추상화는 왜 하는 것일까?

 

첫 번째, 개발을 빠르게 하기 위해서

개발하려는 시스템에서 필요한 객체들을 개념적으로 추상화한 뒤 상위 요소부터 만들어준다.

상위 요소가 가진 내용을 가질 수 있도록 하위 요소를 만들고 상속관계를 설정한다.

전자제품(전원기능)

통신기기(통화기능)

휴대폰(카메라, 게임기능)

아이폰(apple제품 연동기능)
<아이폰 객체>

(상속받은 기능)
전원기능
통화기능
카메라, 게임기능

(고유기능)
apple제품 연동기능

상속 구조를 이용하면 아이폰을 만들 때 아이폰만의 고유기능 위주로 개발할 수 있다.

공통된 기능들은 상위 요소를 만들 때 미리 구현하기 때문이다.

이러한 방식은 아이폰 하나를 만들 때는 비효율적이지만 제품이 늘어날수록 효율적으로 변한다.

공통 기능을 미리 개발해 두고 상속을 통해 빠르게 구조를 확장할 수 있다.  이러한 구조를 상속 구조라고 한다.

전자제품 냉장고
세탁기
통신기기 FAX
무전기
휴대폰 갤럭시
아이폰

기본적으로 하나의 상위요소만 가질 수 있으며 특정 조건을 만족하면 여러 개를 가질 수 있다.

 

두 번째, 유연한 프로그래밍 구조를 만들기 위해서

예를 들어 한 치킨매장에서 후라이드와 양념 치킨을 판매한다. 후라이드와 양념 치킨은 같은 박스에 포장한다.

후라이드와 양념 치킨을 모두 추상화하면 치킨이므로 하나의 상자에 보관할 수 있는 것이다.

프로그래밍적으로는 후라이드와 양념치킨이 상속 관계일 때만 가능하다.

상위 요소인 치킨 상자를 이용하여 후라이드 치킨과 양념 치킨 등 다양한 하위 요소 객체를 보관할 수 있는 성질을 다형성이라고 한다.

 

주차장에 승용차, 벤, 트럭, 버스는 주차할 수 있지만 기차, 비행기는 주차할 수 없는 이유도 다형성에서 찾을 수 있다.

교통수단
자동차
비행기

기차
승용차 트럭 버스

승용차, 벤, 트럭, 버스는 자동차라는 형태로 표현할 수 있는 다양한 형태 중 하나이므로 주차장을 이용할 수 있다.

하지만 비행기, 기차는 자동차로 추상화할 수 없기 때문에 주차장을 이용할 수 없다.

 

 

댓글