Backend/DevOps
개체 지향 프로그래밍 (Object Oriented Programming)
OOP 핵심 개념과 실무에서 객체 모델을 설계할 때 확인해야 할 기준을 정리합니다.
개체 지향 프로그래밍 (Object Oriented Programming)
OOP의 4가지 핵심
- 추상화: 도메인의 본질만 모델링
- 캡슐화: 상태 변경 경로를 제한
- 상속: 공통 동작 재사용
- 다형성: 같은 인터페이스로 다른 구현 사용
실무에서 중요한 포인트
OOP 자체보다 "상태 일관성"이 더 중요합니다.
- 필드 직접 노출보다 메서드로 불변 조건을 강제
- 생성 시점에 유효한 상태를 보장
- 책임이 큰 객체는 애그리거트 분리
간단 예시: BankAccount
public class BankAccount {
public string Number { get; }
public string Owner { get; private set; }
public decimal Balance { get; private set; }
public BankAccount(string owner, decimal initialBalance) {
if (initialBalance < 0) throw new ArgumentException();
Number = Guid.NewGuid().ToString("N");
Owner = owner;
Balance = initialBalance;
}
public void Deposit(decimal amount) {
if (amount <= 0) throw new ArgumentException();
Balance += amount;
}
public void Withdraw(decimal amount) {
if (amount <= 0) throw new ArgumentException();
if (Balance < amount) throw new InvalidOperationException();
Balance -= amount;
}
}
핵심은 메서드가 비즈니스 규칙을 보호한다는 점입니다.
자주 하는 실수
- getter/setter만 많은 빈약한 도메인 모델
- 상속 계층이 깊어져 변경 비용 폭증
- 상태 변경을 여러 서비스에서 임의로 수행
요약
OOP는 패턴 암기가 아니라 모델 경계 설계입니다. 상태 변경 규칙을 객체 안에 모으면 버그와 결합도가 함께 줄어듭니다.