객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란 컴퓨터 프로그램을 어떤 데이터를 입력받아
순서대로 처리하고 결과를 도출하는 명령어들의 목록으로 보는 시각에서 벗어나 여러 독립적인 부품들의 조합,
즉 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 의미한다.
마치 자동차를 만든다고 했을 때,
수 많은 부품들의 결합과 연결로 하나의 완전한 자동차가 만들어지는 것과 같다고 할 수 있다.
객체 지향적으로 소프트웨어를 설계한다는 말의 의미는 어떤 프로그램의 일부분에 해당하는 작은 부품,
즉 객체를 먼저 만들고 이렇게 만들어진 여러 객체들을 조립해서 하나의 완성된 프로그램을 만드는 프로그래밍 방법론을 뜻한다.
객체 지향 프로그래밍의 4가지 특징
: 추상화, 상속, 다형성, 캡슐화
1. 추상화(Abstration)
추상이라는 용어의 사전적 의미를 보면
“사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것”이라 정의하고 있다.
여기서 핵심이 되는 개념은 “공통성과 본질을 모아 추출”한다는 것입니다.
예를 들면, 서울의 지하철 노선도는 서울의 지리를 추상화시켜서 보여주는 대표적인 예라 할 수 있다.
중요한 부분을 강조하기 위해 불필요한 세부 사항들은 제거하고 가장 본질적이고 공통적인 부분만을 추출하여 표현하는 것과 관련이 있다.
객체 지향 프로그래밍에서 의미하는 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는것을 의미한다.
2. 상속(Inheritance)
상속이란 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소를 의미한다.
상속은 클래스 간 공유될 수 있는 속성과 기능들을 상위 클래스로 추상화 시켜 해당 상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의 속성과 기능들을 간편하게 사용할 수 있도록 한다.
즉, 클래스들 간 공유하는 속성과 기능들을 반복적으로 정의할 필요 없이 딱 한 번만 정의해두고 간편하게 재사용할 수 있어 반복적인 코드를 최소화하고 공유하는 속성과 기능에 간편하게 접근하여 사용할 수 있도록 한다.
3. 다형성
객체 지향 프로그래밍의 꽃이라 할 수 있는 다형성.
다형성이란 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질을 의미한다.
어떤 객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할수 있는 객체 지향의 특성을 의미한다.
대표적인 예로 메서드 오버라이딩과 메서드 오버로딩(method overloading)이 있다.
4. 캡슐화(Encapsulation)
캡슐화란 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐(capsule)로 만들어 데이터를 외부로부터 보호하는 것이다.
서로 관련 있는 데이터와 이를 처리할 수 있는 기능들을 한곳에 모아 관리하는 것이다.
자바 객체 지향 프로그래밍에서 이렇게 캡슐화를 하는 이유로 크게 두 가지를 언급할 수 있다.
- 데이터 보호(data protection) – 외부로부터 클래스에 정의된 속성과 기능들을 보호
- 데이터 은닉(data hiding) – 내부의 동작을 감추고 외부에는 필요한 부분만 노출
객체 지향 프로그래밍의 장점
가장 큰 이점 중에 하나는 객체 지향적 설계를 통해서
프로그램을 보다 유연하고 변경이 용이하게 만들 수 있다는 점이다.
마치 컴퓨터 부품을 갈아 끼울 때, 해당하는 부품만 쉽게 교체하고 나머지 부품들을 건드리지 않아도 되는 것처럼
소프트웨어를 설계할 때 객체 지향적 원리를 잘 적용해 둔 프로그램은 각각의 부품들이 각자의 독립적인 역할을 가지기 때문에 코드의 변경을 최소화하고 유지보수를 하는 데 유리하다.
더 나아가, 코드의 재사용을 통해 반복적인 코드를 최소화하고, 코드를 최대한 간결하게 표현할 수 있다.
또한 객체 지향 프로그래밍은 실제 우리가 보고 경험하는 세계를 최대한 프로그램 설계에 반영하기 위한 지속적인 노력을 통해 발전해왔기 때문에, 보다 인간 친화적이고 직관적인 코드를 작성하기에 용이하다.
객체(object)란?
객체는 객체 지향 프로그래밍의 가장 기본적인 단위이자 시작점이라 할 수 있다.
객체 지향 개념의 가장 기본적인 전제는 실제 세계는 객체들로 구성되어 있으며,
보여지는 모든 현상과 발생하는 모든 사건은 이러한 객체들 간의 상호작용을 통해 발생한다는 것에서 출발한다.
책상, 의자, 시계, 전등, 책 등 주변에서 흔히 볼 수 있는
“모든 실재(實在)하는 대상”을 객체 지향 프로그래밍 언어에서는 객체라고 부른다.
객체는 우리가 보고 느끼고 인지할 수 있는 그 모든 것을 의미한다고 할 수 있다.
'etc' 카테고리의 다른 글
[개발 지식] Webpack? Bundle? Browserify? Babel? (0) | 2023.04.20 |
---|---|
[개발 지식] 프레임워크(Framework)와 라이브러리(Library) 차이점 (0) | 2023.04.17 |
[개발 지식] 인덱스 Index란? 개념과 장단점 (0) | 2023.04.15 |
[개발 지식] 네트워크-HTTP 프로토콜이란? (0) | 2023.04.12 |
[개발 지식] 호이스팅이란? (0) | 2023.04.04 |
댓글