객체 지향 프로그래밍, 즉 OOP는 코드를 객체 중심으로 구성하는 방식입니다. 객체는 서로 관련된 데이터와 그 데이터를 다루는 메서드를 함께 묶어 두므로, 프로그램이 은행 계좌, 장바구니, 게임 캐릭터 같은 대상을 더 직접적으로 표현할 수 있게 해 줍니다.
OOP의 중심에는 두 가지 용어가 있습니다. 바로 클래스와 객체입니다. 클래스는 어떤 것이 무엇을 포함해야 하고 무엇을 할 수 있는지를 설명합니다. 객체는 그 클래스를 바탕으로 만들어진 실제 인스턴스 하나입니다.
객체 지향 프로그래밍이란 무엇인가
클래스를 설계도라고 생각하고, 객체를 그 설계도로 만든 실제 물건이라고 생각해 보세요. BankAccount 클래스는 잔액과 deposit, withdraw 같은 메서드를 정의할 수 있습니다. Alice의 계좌와 Bob의 계좌는 같은 규칙을 따르지만 서로 다른 잔액을 가진 두 개의 별도 객체가 됩니다.
그래서 OOP는 상태와 동작을 함께 묶는다고 말합니다. 상태는 객체가 저장하는 데이터입니다. 동작은 그 객체가 허용하는 행동입니다.
왜 OOP가 코드를 더 따라가기 쉽게 만들 수 있을까
OOP는 프로그램 안에 각자 규칙을 가진 뚜렷한 대상이 있을 때 도움이 됩니다. 잔액이 계좌에 속한다면, 잔액을 바꾸는 코드도 보통 그 계좌 안에 있는 것이 자연스럽습니다. 그러면 어떤 책임이 어디에 있는지 더 쉽게 파악할 수 있습니다.
그렇다고 모든 프로그램이 어디서나 클래스를 써야 한다는 뜻은 아닙니다. OOP는 상태와 동작을 함께 묶었을 때 설계가 더 분명해지는 경우에 유용합니다. 문제가 단순한 데이터 처리 위주라면, 일반 함수가 더 읽기 쉬울 수도 있습니다.
BankAccount 클래스로 보는 OOP 예시
다음은 핵심 아이디어를 보여 주는 작은 예시입니다.