| OOP 원칙 | 한 줄 정의 | 스프링에서의 구현 예시 |
|---|---|---|
| 다형성 | 하나의 타입으로 여러 다른 구현 객체를 다룰 수 있는 능력 | @Autowired를 통해 PaymentService라는 인터페이스 변수에 KakaoPayService, NaverPayService 등 다양한 실제 객체를 주입하는 것. |
| 캡슐화 | 내부 데이터와 로직을 숨기고, 외부에 공개된 기능만 제공하는 것 | 모든 Bean 객체가 private 필드와 public 메서드로 구성되어, 내부 구현을 숨기고 외부와는 정해진 방식으로만 소통하는 구조. |
| 추상화 | 복잡한 내용은 숨기고, 핵심 기능(인터페이스)만 외부에 노출하는 것 | PaymentService라는 인터페이스를 통해 "결제한다"는 '무엇'만 정의하고, 실제 복잡한 구현은 각 클래스에 맡기는 설계 방식. |
| 상속 | 부모 클래스의 특징을 자식 클래스가 물려받는 것 | 스프링은 상속보다 조립(Composition), 즉 @Autowired를 통한 부품 연결 방식을 더 권장하여 유연하고 확장성 높은 설계를 유도. |
결론: 스프링은 IoC와 DI라는 핵심 원리를 통해 객체들을 부품처럼 관리하고 조립합니다. 이 과정에서 개발자는 자연스럽게 객체지향 4대 원칙에 따라 코드를 작성하게 되며, 이는 코드의 결합도는 낮추고 응집도는 높여 유연하고 유지보수하기 좋은 애플리케이션을 만들 수 있게 해주는 원동력입니다.