
1. 정의
- 객체 지향 프로그래밍(OOP)은 기능과 논리보다는 데이터 또는 객체를 중심으로 소프트웨어 설계를 구성하는 컴퓨터 프로그래밍 모델이다.
- 객체는 고유한 속성과 동작을 갖는 데이터 필드로 정의될 수 있다.
- 프로그래밍에서 필요한 데이터를 추상화 시켜
상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
- 객체는 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며 값을 저장 할
변수와 작업을 수행 할 메소드를 서로 연관된 것들끼리 묶어서 만든 것을 객체라고 할 수 있다.
- 객체지향 프로그래밍을 레고에 빗대 표현 할 수 있는데,
객체가 레고의 조각이 될 것이고 레고의 조각을 조립해서 무언가를 만드는 방식이 객체지향 프로그래밍이라고 할 수 있다.
- 객체는 또한 레고 조각과도 비슷하게 여러군데에서 재사용 할 수 있는데 이는
부품화 와 재사용성 이라는 객체 지향 프로그래밍의 특징을 보여주기도 한다.
- 객체지향 프로그래밍을 지원하는 언어로는
C++ , C# , Java , Python , JavaScript , Ruby , Swift 등이 있다.
2. 구조

- 클래스
- 개별 객체, 속성 및 메소드에 대한 청사진 역할을 하는 사용자 정의 데이터 유형
- 객체
- 구체적으로 정의된 데이터로 생성된 클래스의 인스턴스이다.
- 객체는 실제 객체 또는 추상 엔터티에 해당할 수 있다.
- 클래스가 처음 정의되면 설명만 정의된다.
- 속성
- 클래스 템플릿에 정의되며 객체의 상태를 나타낸다.
- 객체는 속성 필드에 데이터를 저장한다.
- 클래스 속성은 클래스 자체에 속한다.
- 메소드
- 객체의 동작을 설명하는 클래스 내부에 정의된 함수다.
- 클래스 정의에 포함된 각 메서드는 인스턴스 개체에 대한 참조로 시작된다.
- 또한 객체에 포함된 서브루틴을 인스턴스 메서드라고 한다.
- 프로그래머는 재사용성을 위해 방법을 사용하거나 한 번에 하나의 객체 내에 기능을 캡슐화한다.
3. 주요 원칙
3-1. 캡슐화

- 데이터 구조와 데이터를 다루는 방법들을 결합 시켜 묶는 것 (변수와 함수를 하나로 묶는 것)
- 속성과 기능을 정의하는 변수와 메소드를 클래스라는 캡슐에 넣어서 분류하는 것으로 재활용이 원활하다.
- 각 객체의 구현과 상태는 정의된 클래스 내에 개인적으로 보관된다. 다른 개체에는 이 클래스에 대한 액세스 권한이나 변경 권한이 없다. (정보은닉)
- 모든 중요한 정보가 객체 내부에 포함되고 선택된 정보만 노출된다.
- 공개 함수나 메서드 목록만 호출할 수 있다. 이러한 데이터 숨김 특성은 프로그램 보안을 강화하고 의도하지 않은 데이터 손상을 방지한다.