Object Oriented Programming - 객체 지향 프로그래밍
컴퓨터 프로그래밍의 패러다임 중 하나로 프로그램을 객체(Object) 단위로 나누면서 이를 상호작용하도록 작성하는 방법이다. 여기서 객체는 어떤 역할을 수행하는 함수와 변수의 묶음의 개념으로 본다.
객체 지향 프로그래밍이라는 패러다임이 등장하기 전에는 절차 지향 프로그래밍 방식을 사용했다고 한다. 먼저 입력을 받아 명시된 순서대로 처리한 다음 결과를 내는 것. 즉, 프로그램 자체가 가지는 기능을 구현하는데 생각이 그쳤고, 이에 데이터를 취급하는 방법에는 관심이 적었다고 한다.
그러나 시간이 지남에 따라 기능이 많은 코드들을 작성하게 될 경우 매우 복잡한 코드를 만들게 되었고 이를 극복하기 위해 등장한 것이 '객제 지향 프로그래밍'이다. 객체 지향 프로그램의 원리는 작은 문제를 해결할 수 있는 객체들을 우선 만들고 이 객체들을 조합하여 큰 문제를 해결하는 방법이다.
이에 따른 객체 지향 프로그래밍의 장점은 잘 만들어둔 객체가 있다면 수정할 필요없이 재사용할 수 있어 개발기간과 비용이 대폭 줄어들게 됨으로써 생산성있게 개발을 할 수 있다는 것이다.
객체지향프로그래밍
1) 처리방식: 문제를 여러개의 객체로 나누어 처리
2) 장점: 코드 재사용이 용이하다, 유지보수가 쉽다.
3) 단점: 객체가 많으면 용량이 커진다, 처리 속도가 상대적으로 느리다.
절차지향프로그래밍
1) 처리방식: 문제를 여러개의 함수로 나누어 처리
2) 장점: 처리속도가 빠르다, 실행속도가 빠르다.
3) 단점: 유지보수가 어렵다, 대규모 프로젝트에 부적합하다.
객체지향프로그래밍은 캡슐화(Encapsulation), 상속(Inheritance), 추상화(Abstraction), 다형성(Polymorphism)의 요소를 가지고 있으며 각각의 개념은 아래와 같다.
외부에 따로 속성이나 기능을 하나로 묶어 객체로 정의하고 객체 안에서 정의된 속성은 해당 객체에서만 접근이 가능하다. 이는 클래스(class) 라는 개념으로 구현된다. 클래스는 객체지향을 지원하는 언어가 제공한다.
상속은 부모객체의 특징을 물려받는 것이다. 즉, 부모가 가진 속성이나 메서드를 그 자식이 부모의 속성이나 메서드를 상속받아 가질 수 있다. 이를 통해 프로그램의 복잡도를 줄여주고 불필요한 코드까지 제거할 수 있다. 또한 상속받은 자식의 기능의 일부분을 변경해야 할 경우, 해당하는 기능을 다시 정의하게 되는데 이를 오버라이딩(Overriding)이라고 한다.
추상화는 복잡한 것들을 어떤 객체의 이름으로 추상화시켜서 내부 메서드의 구현이 어떤지 몰라도 사용자가 사용하기 쉽게 만드는 것이다.
예를 들어 자동차의 엔진이 어떻게 돌아가고 연료가 어떻게 사용되는지 이해하지 않아도 우리는 "핸들"과 "브레이크", "엑셀 페달"같이 추상화 되어있는 도구(객체)를 사용하기만 하면 되는 것이다.
객체의 변수나 메서드가 상황에 따라 다른 의미로 해석될 수 있는 것을 의미한다. 상속에서 언급했던 오버라이딩(Overriding) 기법을 사용해 자식 클래스의 메서드가 부모 클래스의 메서드와 다르게 동작하거나 변수가 다른 값으로 지정될 수 있다.
예를 들어 포유류의 범주(부모 클래스)에 있는 강아지(자식 클래스)나 고양이(자식 클래스)가 소리를 낼 때(같은 메서드) '멍멍', '냐옹'하는 것과 같이 다르게 소리를 내는 것과 같다.