[Java] 객체지향언어
객체지향언어
앞서 자바를 설명한 글에 의하면 자바는 객체지향언어라는 걸 봤을 것이다. 여기서 객체지향언어란 무엇일까? 들어가기 앞서 프로그램 언어에는 객체지향언어와 절차지향언어라는 것이 있다. 이 글에서는 둘은 무엇이 다른지 다룰 것이다.
절차지향언어
절차지향언어는 절차지향 프로그래밍에서 쓰이는 언어를 말하고 대표적으로 c언어가 있다. 절차지향언어는 개체를 순차적으로 처리하여 프로그램 전체가 유기적으로 연결되어야 하는 언어이다. 절차지향언어의 예시는 자동차 제조를 들 수 있다. 자동차는 엔진, 차체, 핸들, 의자, 바퀴 순으로 차례대로 만들어져야 하고 이들이 서로 분리되어도 안 되고, 순서가 틀려도 안 된다는 걸 알 수 있다.
절차지향언어의 장점
절차지향언어의 구조는 컴퓨터의 처리 구조와 유사하다. 따라서 컴퓨터의 처리 속도와 마찬가지로 실행 속도가 빠르다는 것을 장점으로 들을 수 있다. 즉, 들어오면 유기적으로 빠른 속도로 처리가 가능하다는 것이다.
절차지향언어의 단점
1. 비효율적인 생산 효율
절차지향언어는 실행순서가 엄격하게 정해져 있기 때문에 코드의 순서가 바뀌면 결과가 달라질 가능성이 높다. 즉, 언어의 융통성이 부족하여 생산 효율이 떨어진다는 것이다.
2. 유지보수의 어려움
절차지향언어는 모든 구성요소가 유기적으로 연결되어 있다. 이는 장점일 수 있지만 반대로 하나가 고장난다면 시스템 전체가 유기적으로 연결되어 있어 시스템 전체가 모두 고장난다는 뜻으로 볼 수 있다. 문제를 해결하기 위해 일부분이 아닌 시스템 전체를 수리해야 한다는 말이다. 이런 면에서 절차지향언어는 유지보수가 매우 까다로운 편이며, 특히 디버깅(프로그램의 문제를 찾아 고치는 과정)이 어렵다.
객체지향언어⭐
절차지향언어의 비효율적이고 유지보수가 어렵다는 단점들을 보완하기 위해서 객체지향언어가 등장하였다. 먼저 객체란 구체적인 사물 혹은 사람이 될 수도 있고 추상적인 개념이 될 수도 있는 무언가를 말한다. 예를 들어, 어떤 기기에 대한 모든 기능들을 전부 객체로 볼 수 있는 것이다.
이를 미루어 보았을 때, 객체지향언어란 프로그램을 다수의 객체로 만들고 이 객체들끼리 서로 상호작용하도록 만든 프로그래밍 언어이다. 우리가 흔히 알고 있는 자바, c++, 파이썬 등이 모두 객체지향언어이다.
객체지향언어의 특징
1. 캡슐화
캡슐화란 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것이다. 캡슐로 만들어 보호하기 때문에 데이터와 코드의 형태를 외부에서 알 수 없다.
2. 상속
상속은 흔히 부모가 자식에게 유전자를 물려주 듯이 상위 클래스의 모든 것을 하위 클래스가 이어 받는 것을 말한다. 상속을 다른 말로 하자면 계승, 확장이라는 표현을 할 수 있는데 하위 클래스가 상위 클래스의 기능, 데이터를 이어 받아 상위 클래스의 기능, 데이터들을 사용할 수 있다는 것이다.
3. 다형성
다형성은 상속과 연관된 개념으로 하나의 객체가 다른 여러 객체로 재구성되는 것을 말한다. 쉽게 말해, 부모가 쌍둥이 자식을 낳으면 부모의 유전자가 두명의 자식으로 재구성되는 것을 예로 들을 수 있다. 쌍둥이가 부모의 유전자를 받았다고 해서 둘의 유전자가 각각 다르고 부모와도 다르다는 것이 다형성의 개념이다. 다형성을 사용하자면 자바의 오버로드, 오버라이드 다형성을 예로 들을 수 있다.
4. 추상화
추상화란 실존하는 객체의 여러 특성 중 프로그램을 만드는데 필요한 공통적인 부분만 파악해서 추출하고 필요하지 않은 것은 제거하는 개념이다.
객체지향언어의 장점
1. 재사용성
객체지향언어의 '상속', '캡슐화' 특징 덕분에 코드를 다시 작성할 필요 없이 가져다가 편리하게 재사용할 수 있다.
2. 생산성 증가
절차지향언어의 단점과 반대로 문제가 되는 기능만 고치면 되기 때문에 생산적이다. 또 마찬가지로 독립된 객체만 보면 되기 때문에 유지보수에 용이하다.
3. 자연스러운 모델링
객체는 세상에 존재하는 모든 것이기 때문에 객체지향언어 자체가 우리가 사는 세상과 닮아 있기 때문에 개발자가 생각하는 대로 자연스럽게 구현할 수 있다.
객체지향언어의 단점
1. 느린 개발 속도
모든 객체의 역할과 기능을 이해해야 하기 때문에 프로그램을 개발하는데 많은 시간이 소요된다.
2. 느린 실행 속도
객체지향언어는 순차적으로 모두 처리하는 절차지향언어보다는 느리다.
3. 높은 난이도
모든 객체의 역할과 기능을 이해하면서 개발해야 하기 때문에 개발 난이도가 높다. 특히 다중 상속이 지원되는 c++의 개발 악명이 높다.