객체지향 프로그래밍
객체 지향 프로그래밍(OOP, Object-Oriented Programming)이란 컴퓨터 프로그램을 여러 명령어(command)의 목록으로 보지 않고 여러 개의 독립된 객체(object)들의 집합으로 파악하는 프로그래밍 기법이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 객체라는 기본 단위로 나누고, 각각의 객체가 메시지를 주고받으며 데이터를 처리하는 비절차적 프로그래밍 방법이다.
역사
초기 프로그래밍 방식인 절차적 프로그래밍 방식은 입력을 받아 명시된 순서대로 처리한 다음 그 결과를 내는 언어로서, 조금만 복잡해져도 다른 사람이 보고 이해하기 어려울 정도여서 유지보수가 어려운 단점이 있었다. 절차적 프로그래밍 방식을 보완하기 위해 1960년 조한 달과 크리스틴이 시뮬라67(Simula67)을 발표했다. 시뮬라는 최초의 객체 지향 프로그래밍 언어였으나 널리 확산되지는 못하였다. 이어서 팰러액토 연구소의 스몰토크(Smalltalk), 미 국방성의 에이다 등이 만들어졌다. 이후 AT&T 벨 연구소의 C++, 1990년대 중반 이후로 각광받고 있는 썬 마이크로시스템즈의 자바(Java) 언어가 만들어졌다. 이후 펄(Perl), 파이썬(Python), PHP, 루비(Ruby), C# 등 다양한 객체 지향 프로그래밍 언어가 만들어졌다.
구성 요소
- 객체(object) : 객체는 데이터와 그에 관련되는 동작(절차, 방법, 기능)을 모두 포함하는 인스턴스이다.
- 클래스(class) : 같은 종류의 집단에 속하는 속성, 오퍼레이션, 관계 등을 갖고 있는 객체들의 집합이다.
- 메소드(method) : 클래스 내부에 정의된 객체가 수행해야 할 오퍼레이션이다. 기존의 프로그래밍 언어에서 함수(function)와 같은 역할을 한다.
특징
- 캡슐화(encapsulation) : 프로그램의 실제 구현 내용이 외부로 드러나지 않도록 특정 모듈(클래스) 내부로 은닉하는 것이다.
- 상속(inheritance) : 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받음으로써, 캡슐화 및 재사용이 용이하도록 해준다.
- 다형성(多形性, polymorphism) : 하나의 변수명이 상황에 따라 다른 의미로 해석될 수 있는 성질을 뜻한다. 일반적으로 오버라이딩과 오버로딩을 의미한다.
객체 지향 언어
다양한 객체 지향 프로그래밍 언어가 존재한다.
- 스몰토크(Smalltalk)
- 루비(Ruby)
- 파이썬(Python)
- 자바(Java)
- C#
- C++
- Objective-C
- 오브젝티브-파스칼(Objective-Pascal)
- 비주얼 베이직 닷넷(VB.NET)
- 델파이(Delphi)
- ASP