📖 객체지향이란?
객체지향 프로그래밍(Object-Oriented Programming)이란 프로그램을 설계하는 개념이자 방법론을 의미합니다. 여기서 나오는 객체라는 단어가 현실에서는 잘 쓰이지 않는 단어라 의미가 안 와닿을 수 있습니다.
이해하기 쉽게 예시로 설명하자면, 주변에 존재하는 모든 사물(자동차, 건물, 옷 등), 생명체(사람, 고양이 등) 하나하나가 다 객체라고 할 수 있습니다.
따라서 객체지향 프로그래밍이란 단어 뜻 그대로, 프로그램을 상태(state)와 행위(behave)로 이루어진 객체라는 기본단위로 나누고, 이 객체들간의 상호작용을 통해 프로그램을 설계하고 개발하는 것 입니다.
💡 객체지향 언어의 특징 4가지
👉 캡슐화(Encapsulation)
한 객체가 특정한 하나의 목적을 위해 필요한 데이터나 메서드를 데이터(속성)와 데이터를 처리하는 함수(메서드)를 하나로 묶는 것을 의미합니다. 여기서 '클래스'라는 개념은 객체를 만드는 틀(붕어빵 틀), '객체'라는 개념은 틀을 통해 만들어진 실체(붕어빵)를 의미합니다.
✔ 정보은닉(Information Hiding)
데이터와 코드의 형태를 외부로부터 알 수 없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만드는 방법으로 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것을 말합니다. 보호된 변수는 getter나 setter 등의 메서드를 통해서만 간접적으로 접근을 허용합니다.
보다 쉽게 이해하기 위해 예시를 적용하면 캡슐약 안에는 여러 종류의 약이 섞여있지만, 사용자는 그 약이 어떤 것인지 하나하나 알지 못하더라도 약을 먹으면 효과가 나타나게 됩니다.
👉 추상화
여러 객체들의 공통적인 특징(속성과 기능)을 추출하여 정의하는 것을 말합니다.
예시) 아이패드와 갤럭시탭 두 가지의 객체가 있다고 하면, 두 객체의 공통점(디스플레이가 있다, 스피커가 있다, 카메라가 있다 전원을 켤 수 있다 등)을 찾아내여 하나로 정의하는 것을 말합니다. 일반적으로 보통 객체 지향 프로그래밍에서 클래스를 정의하는 걸 추상화라고 생각하면 됩니다.
👉 상속성
상속이란 기존 상위 클래스에 기능을 가져와 재사용(모든 속성과 연산을 하위 클래스가 물려받는 것)을 할 수 있으면서도 동시에 새로운 하위 클래스에 새로운 기능도 추가할 수 있는 것을 의미합니다. 즉, 부모가 자식에게 유전자를 물려주듯이 부모의 특징을 자식에게 모두 물려주는 것을 말하는데 OOP에서 이를 부모 클래스, 자식 클래스라고 표현합니다. 상속관계를 맺으면 자식 객체를 생성할 때 부모 클래스의 속성들을 자동으로 물려받기 때문에 자식 클래스에서 다시 정의할 필요가 없습니다.
상속은 불필요한 코드의 중복을 막아줍니다. 코드의 중복이 많아지게 되면 개발 단계와 유지 보수에서 많은 비용이 들게 되기 때문입니다.
예시) 동물(호흡함 + 걸어 다님) => 포유류( [호흡함 + 걸어 다님] + 새끼에게 젖을 먹여 영양분을 공급함)
👉 다형성
다형성이란 상속과 연관 있는 개념으로 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러 형태(객체)로 재구성되는 것을 말합니다. 오버로드(Overload) 또는 오버라이드(Override)가 다형성의 대표적인 예라 할 수 있고, 이것을 구현하는 걸 오버로딩(Overloading)과 오버라이딩(Overriding)이라고 합니다.
✔ 오버라이딩(Overriding)
오버라이딩은 하위 클래스(자식)가 상위 클래스(부모)에서 만들어진 메서드를 자신의 입맛대로 다시 재창조해서 사용하는 것을 말합니다.
✔ 오버로딩(Overloading)
오버로딩은 하나의 클래스 안에서 같은 이름의 메서드를 사용하지만 각 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현하는 것을 말한다. 오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 개수나 데이터 타입이 달라야 합니다.
다형성을 사용하면 같은 이름의 속성을 유지함으로써, 속성을 사용하기 위한 인터페이스를 유지하고, 메서드 이름을 낭비하지 않게 됩니다. API가 많아질수록 복잡성은 증가하기 때문에 다형성은 유용하며 코드 재사용성을 늘려주어 유지보수가 용이하도록 도와주는 개념입니다.
예시) 동물소리를 내는 클래스가 있다면, 고양이를 입력했을 때 결과 값은 '야옹', 닭을 입력했을 때 결괏값은 '꼬꼬댁'으로 출력됨.
💻 객체지향 언어의 장·단점
✔ 장점
1) 코드의 재사용성 용이
- 상속을 통해 프로그래밍 시, 코드의 재사용률을 높일 수 있습니다.
2) 생산성 향상
- 잘 설계된 클래스를 통해 독립적인 객체를 활용함으로써, 개발의 생산성을 향상할 수 있습니다.
3) 자연적인 모델링
- 일상생활에서 쓰는 개념을 그대로 객체라는 구조로 표현하여 개발함으로써, 생각한것을 그대로 구현할 수 있습니다.
4) 유지보수의 용이성
- 프로그램을 변경할 때 수정, 추가를 하더라도 캡슐화를 통해 주변 코드에 영향이 적기 때문에 유지보수가 용이합니다.
✔ 단점
1) 실행 속도가 느림.
- 객체지향언어(C++, JAVA 등)는 상대적으로 실행 속도가 느립니다.
2) 프로그램 용량이 큼
- 객체 단위로 프로그램을 많이 만들다보면, 불필요한 정보들이 같이 삽입될 수 있고, 이는 프로그램의 용량 증가로 이어질 수 있습니다.
3) 설계에 많은 시간 소요
- 클래스별로, 객체별로 설계하고, 상속 등의 구조 또한 설계하여야 하기 때문에, 설계단계부터 많은 시간이 소모됩니다.
😉 최종 정리
1) 객체지향언어는 상태(state)와 행위(behave)로 이루어진 객체라는 기본단위로 나누고, 이 객체들간의 상호작용을 통해 프로그램을 설계하고 개발하는 것을 말합니다.
2) 객체지향은 캡슐화, 추상화, 상속성, 다형성 4가지 특징을 가지고 있습니다.
3) 객체지향 프로그래밍은 재사용이 용이하고, 생산성이 높으며, 유지보수가 용이한 장점이 있는 반면, 설계에 시간이 오래 걸리고, 실행 속도가 느린 단점이 있습니다.
출처 및 참고 :
'IT > Front-End' 카테고리의 다른 글
REST API 알아보기 (0) | 2022.07.14 |
---|---|
디바운싱(debouncing) vs 쓰로틀링(throttling) (0) | 2022.07.12 |
[자료구조] - 큐/스택 (0) | 2022.07.08 |
Get과 Post의 차이를 아시나요? (0) | 2022.07.08 |
메타(meta) 태그 종류 정리 (0) | 2022.06.16 |
제 블로그의 모든 글은 제가 직접 작성 하고 다른 글을 참고할 때는 이전 글보다 읽기 편하게 수정해서 작성하고 있습니다. 커피 한잔 사먹고 더 열심히 좋은글로 보답하겠습니다.
오늘도 제 블로그에 와 주셔서 감사합니다. :)