15th Jan. 2023
1. 객체지향 프로그래밍 (Object-Oriented Programming) 개요
정의
- 객체지향은 명확한 정의가 없는게 특징이라고 한다. (?)
- 그래서 객체지향은 객체지향의 특성을 통해 이해하는게 좋다고 한다.
- 객체지향 프로그래밍은 실세계에 존재하고 인지하고 있는 객체(Object)를 소프트웨어의 세계에서 표현하기 위해 객체의 핵심적인 개념 또는 기능만을 추출하는 추상화(abstraction)를 통해 모델링하려는 프로그래밍 패러다임을 말한다.
- 즉 우리가 실세계에서 사물을 인지하는 방식을 프로그래밍에 접목하려는 사상이다.
절차지향 프로그래밍과의 비교
- 절차지향은 프로그래밍을 함수들의 집합 / 단순한 컴퓨터의 명령어들의 목록으로 생각하는 전통적인 프로그래밍 패러다임이다.
- 반면 객체지향은 관계성 있는 객체들의 집합이라는 관점으로 접근하는 소프트웨어 디자인이다.
객체지향의 특성
- 객체가 할 수 있는 일들
- 메시지 받기
- 데이터 처리하기
- 다른 객체에게 미시지 전달하기
- 이처럼 객체는 별도의 역할이나 책임을 갖는 작은 독립적인 기계 또는 부품으로 볼 수 있다고 한다.
- 객체지향 프로그래밍은 유연하고 유지보수와 확장성 측면에서 용이하기 때문에 대규모 소프트웨어 개발에 널리 사용되고 있다고 한다.
2. 클래스 기반 vs. 프로토타입 기반
2.1 클래스 기반 언어
- 예시 - Java, C++, C#, Python, PHP, Ruby, Object-C 등
- 클래스로 객체의 자료구조와 기능을 정의하고 생성자를 통해 인스턴스를 생성하는 언어이다.
2.1.1 클래스와 인스턴스
- 클래스란 같은 종류의 집단에 속하는 속성(attribute)과 행위(behavior)를 정의한 것으로, 객체지향 프로그램의 기본적인 사용자 정의 데이터형(user define data type)이라고 할 수 있다.
- 클래스는 객체(인스턴스) 생성에 사용되는 패턴 혹은 설계도(blueprint)이다.
- 클래스가 실제로 사용되기 위해서는 결국 new 연산자를 통한 인스턴스화 과정이 필요하다.
- 모든 인스턴스는 오직 클래스에서 정의된 범위 내에서만 작동하며, 런타임에 그 구조를 변경할 수 없다.
- 이러한 특성 덕분에 클래스 기반 언어는 프로토타입 기반 언어보다 정확성, 안정성, 예측성 측면에서 강점을 가진다.