정의
객체는 객체지향 프로그래밍(Object-Oriented Programming, OOP) 패러다임에서 핵심 개념으로, 데이터와 해당 데이터를 조작하는 메서드(함수)를 하나의 단위로 결합한 논리적 실체이다. 객체는 클래스라는 설계도에 의해 생성되며, 클래스가 정의한 속성(필드)과 행위(메서드)를 실제 메모리 상에 구현한다.
특징
| 특징 | 설명 |
|---|---|
| 캡슐화 (Encapsulation) | 객체는 내부 상태를 외부에서 직접 접근할 수 없도록 보호하고, 공개된 인터페이스(메서드)를 통해서만 데이터를 읽고 수정한다. |
| 상속 (Inheritance) | 객체는 상위 클래스(부모 클래스)의 속성과 메서드를 물려받아 재사용 및 확장이 가능하다. |
| 다형성 (Polymorphism) | 같은 인터페이스를 구현하는 객체들이 상황에 따라 서로 다른 구현을 수행하도록 허용한다. |
| 동적 바인딩 | 메서드 호출 시점에 실제 실행될 메서드가 객체의 실제 타입에 따라 결정된다. |
구성 요소
-
속성(필드, 멤버 변수)
- 객체가 보유하는 상태를 나타내는 데이터. 예:
Person클래스의name,age등.
- 객체가 보유하는 상태를 나타내는 데이터. 예:
-
메서드(멤버 함수)
- 객체의 행동을 정의하는 함수. 예:
Person클래스의walk(),introduce()등.
- 객체의 행동을 정의하는 함수. 예:
-
식별자(Identity)
- 동일한 속성 값을 가진 객체라도 서로 구별되는 고유성을 갖는다. 일반적으로 메모리 주소나 내부 식별자를 통해 구현된다.
생성 과정
- 클래스 정의 – 속성과 메서드를 선언하여 객체의 청사진을 만든다.
- 인스턴스화 –
new연산자(또는 언어별 생성 메커니즘)를 사용해 클래스로부터 실제 객체를 생성한다. - 초기화 – 생성자(constructor)를 통해 초기 상태를 설정한다.
주요 언어별 구현 예시
-
Java
class Car { private String model; private int year; public Car(String model, int year) { this.model = model; this.year = year; } public void drive() { System.out.println(model + " is driving."); } } Car myCar = new Car("Tesla", 2023); myCar.drive(); // 출력: Tesla is driving. -
Python
class Car: def __init__(self, model, year): self.model = model self.year = year def drive(self): print(f"{self.model} is driving.") my_car = Car("Tesla", 2023) my_car.drive() # 출력: Tesla is driving. -
C++
class Car { private: std::string model; int year; public: Car(const std::string& m, int y) : model(m), year(y) {} void drive() const { std::cout << model << " is driving." << std::endl; } }; Car myCar("Tesla", 2023); myCar.drive(); // 출력: Tesla is driving.
관계 개념
- 클래스: 객체를 생성하기 위한 설계도. 객체는 클래스의 인스턴스이다.
- 인스턴스: 특정 클래스에 의해 구체화된 객체 자체를 가리키는 용어.
- 메서드: 객체 내부에 정의된 함수이며, 객체의 행위를 구현한다.
- 속성: 객체가 보유하는 데이터 요소로, 클래스에서 선언된 변수와 대응한다.
활용 분야
- 소프트웨어 설계: 객체지향 설계 원칙에 따라 시스템을 모듈화하고 유지보수성을 향상시킨다.
- 그래픽 UI: 화면 요소(버튼, 창 등)를 객체로 모델링하여 이벤트 처리와 상태 관리가 용이해진다.
- 데이터베이스 ORM(Object-Relational Mapping): 테이블 행을 객체에 매핑하여 객체 중심의 데이터 접근을 지원한다.
역사적 배경 및 어원
'객체'라는 용어는 영어 object를 번역한 것으로, 라틴어 objectum(‘놓여진 것’, ‘대상’)에서 유래한다. 객체지향 프로그래밍 개념은 1960년대 Simula 언어에서 초기 형태가 나타났으며, 1980년대에 Smalltalk, C++, Java 등에서 본격화되었다. 한국어에서는 컴퓨터 과학 분야에서 1990년대 이후 널리 사용되기 시작했다.