객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
- 위키피디아 -
객체지향 프로그램밍(Object-Oriented Programming)은 프로그래밍 패러다임 중 하나로, 상태(state)와 행위(behave)로 이루어진 객체들간의 상호작용을 통해 프로그램을 설계, 개발 하는 것이다. 즉, 쉽게 말해 객체지향 프로그래밍은 객체를 만드는 것이다. '객체' 라는 말은 Object를 직역한 말인데, 쉽게 말해 변수와 메소드를 그룹핑 한 개념이다.
즉, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
객체지향 프로그래밍의 장점
1) 코드 재사용 용이
모듈화된 객체, 그리고 상속을 통해 코드의 재사용을 높일 수 있다.
2) 생산성 향상
독립적인 객체를 사용함으로써 개발의 생산성을 향상시킬 수 있다. 이미 생성된 클래스를 상속 받거나, 객체를 재사요, 부분 수정 등 적은 노력으로 높은 효율을 만들어낸다.
3) 자연적인 모델링 가능
현실세계에서 사용하는 개념을 대입하여, 생각한 것을 그대로 구현할 수 있다.
4) 유지보수 용이
프로그램 수정, 추가시에도 캡슐화 덕분에 주변 코드에 영향이 덜 가기 때문에 유지보수가 용이하다.
객체지향 프로그래밍의 단점
1) 실행속도 느림
전반적으로, 객체지향 언어(C++, Java, ruby)는 컴퓨터의 처리 구조와 비슷한 절차지향 언어(C언어)보다 상대적으로 실행속도가 느리다.
2) 프로그램 용량이 커질 수 있음
객체단위로 프로그램을 많이 만들다보면, 불필요한 정보들이 들어갈 수 있는데 프로그램의 용량이 증가될 수 있다.
3) 설계에 많은 시간 소요
초기에 클래스별, 객체별, 상속 등의 구조 등을 모두 설계해야 하기 때문에 절차지향 언어에 비해 설계 시간이 많이든다.
객체 지향 프로그래밍의 특징
1. 캡슐화 (Encapsulation) : 데이터와 함수를 하나로 묶는다.
- 데이터의 세부 내용이 객체 은닉된다. 즉, 데이터 변경으로 인한 에러가 줄어들고, 객체들간에 데이터를 자세히 알 필요가 없으므로 코드가 단순해진다.
- 객체와 함수의 재사용이 쉽다.
2. 정보은닉 (Information Hiding) : private으로 선언한 데이터는 자기 자신을 통해서만(setter, getter) 접근 가능하다.
- 각 객체간의 수정이 다른 객체에 미치는 영향을 최소화 한다.
- 외부 객체의 직접 접근을 막아 프로젝트 확장 시 오류를 최소화 한다.
3. 추상화 (Abstraction) : 불필요한 부분은 생략하고 중요한 것에만 초점을 맞춰 모델로 만든다.
- 복잡한 모델을 중요한 것 만 추려 추상화 함으로써 시스템 구조를 시각적으로 표현할 수 있다.
- 완전한 시스템이 구축되지 않더라도 개략적으로 모델을 만들어 테스트 하고 살을 붙여나갈 수 있다.
4. 상속성 (Inheritance) : 부모클래스에 정의된 모든 것을 자식 클래스가 물려받는다.
- 재정의 할 필요가 없어 코드 작성이 간결해진다.
- 상속으로 인한 최소한의 규칙을 통해 프로젝트의 확장 시 오류를 최소화 한다.
- 자식클래스에서 새로운 함수를 추가하거나 부모 클래스의 함수를 재정의(Overriding)해 사용할 수 있다.
- 클래스의 재사용이 쉽다.
5. 다형성 (Polymorphism) : 호출하는 객체에 따라 다른 동작을 한다.
- 하나의 클래스에서 같은 이름의 함수를 여러 개 가질 수 있다(Overloading). 호출하는 객체가 어떤 인풋 파라미터를 사용해 호출하냐에 따라 각자 다른 함수가 호출되게 한다. 즉, 비슷한 기능을 하는 다른 함수를 만들 때 불필요하게 너무 많은 함수명을 만들어 내 가독성이 떨어지는 문제를 해결할 수 있다.
참고자료
'CS > 개발상식' 카테고리의 다른 글
[개발상식] API란 무엇인가? (0) | 2023.08.16 |
---|---|
[개발상식] 디자인 패턴 (0) | 2023.07.01 |
[개발상식] 프로그래밍 패러다임 (0) | 2023.06.25 |
[개발상식] 프레임워크와 라이브러리의 차이점 (0) | 2023.06.25 |