객체지향 프로그래밍(Object-Oriented Programming, OOP)
상태(필드)와 행동(메서드)으로 구성된 객체를 바탕으로 객체 간 상호작용을 통해 로직을 구성하는 프로그래밍 패러다임
- 객체(object) : 사람, 사물 등 세상에 존재하는 모든 대상들을 객체라고 할 수 있다. 객체지향 프로그래밍에서는 이러한 객체를 상태(속성)와 행동(기능)으로 추상화하여 각각 필드와 메서드의 형태로 객체를 정의하고 객체들 간의 상호작용을 통해 프로그램이 동작한다.
- 클래스가 실체화된 형태, 클래스의 인스턴스
- 각 객체는 독립적인 상태. 객체마다 고유한 데이터를 가질 수 있다.
객체지향 프로그래밍의 특징
- 추상화 (Abstraction) : 객체의 공통적인 속성과 기능을 추출하여 정의하는 것
- 공통된 부분을 클래스로 모델링
- 불필요한 세부적인 구현을 생략하고 객체의 중요한 부분에 집중하여 핵심적인 역할만 수행
- 캡슐화 (Encapsulation) : 연관있는 데이터와 기능을 하나의 단위로 묶어 외부로부터 보호하는 것
- 클래스를 이용하여 데이터와 메서드를 캡슐화
- 정보를 은닉하고, 외부로부터의 직접적인 접근을 제한
- 상속 (Inheritance) : 기존의 클래스를 활용하여 새로운 클래스를 만드는 메커니즘
- 부모 클래스(상위 클래스, 슈퍼 클래스)의 상태와 동작을 자식 클래스(하위 클래스, 서브 클래스)가 이어 받아 재사용
- 여러 객체의 공통된 상태나 동작을 부모 클래스로 정의하고 각 객체에 대한 클래스를 정의할 때 부모 클래스로부터 상속 받아 공통된 부분에 대한 코드 중복을 줄인다
- 클래스 간 계층 구조를 구성하여 코드를 구조화 할 수 있다
- 다형성 (Polymorphism) : 어떤 객체의 속성이나 기능이 상황에 따라 다른 역할을 수행할 수 있도록 다양한 방식으로 구현하거나 사용할 수 있는 능력
- 동일한 이름을 가진 메서드가 여러 객체에서 다르게 동작할 수 있도록 하는 것
- 오버로딩과 오버라이딩을 통해 구현
클래스
객체를 생성하기 위한 틀 또는 설계도. 객체의 상태와 행동을 정의
- 필드(Fields): 클래스에서 사용되는 변수. 객체의 상태를 나타내는 데이터를 저장
- 메서드(Methods): 클래스에서 수행되는 동작. 객체의 행동을 구현
- 생성자(Constructors): 객체를 초기화하는 역할. 객체가 생성될 때 자동으로 호출
- 소멸자(Destructors): 객체가 소멸될 때 호출
접근 제한자
클래스, 필드, 메서드 등의 접근 권한을 지정하는 키워드. 클래스의 캡슐화를 제어하는 역할
- public : 외부에서 자유롭게 접근 가능
- private : 같은 클래스 내부에서만 접근 가능
- protected : 같은 클래스 내부, 상속 받은 클래스에서 접근 가능
프로퍼티 (Property)
클래스 맴버로서 객체의 필드 값을 읽거나 설정하는데 사용되는 접근자 메서드의 조합
- 접근 제한(캡슐화)을 건드리지 않고 외부에서 간접적으로 필드의 값을 읽거나 설정
- get : 필드를 반환하거나 다른 로직을 수행
- set : 필드에 값을 설정하거나 다른 로직을 수행
- 예시 : private로 접근 제한된 필드 값 name과 name에 대한 프로퍼티
class Person
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
}