Programming/Spring

OOP + POJO

Boxya 2025. 5. 20. 22:15

[KT] AIVLE SCHOOL 36일차

 

POJO(Plain Old Java Object)

  • Spring는 POJO를 지향하는 프레임워크
  • 특정 기술에 종속되어 작동하는 것이 아닌 순수한 자바 객체를 의미
  • POJO는 IoC/DI, AOP, PSA를 통해서 달성할 수 있음
  • Spring이 POJO를 지향하는 이유
    • 특정 기술들에 종속성을 띠게 되면 객체지향적인 설계가 힘들거나 불가능한 경우가 발생
    • 위와 같은 문제는 코드의 유지보수와 재사용성에서 매우 불리해짐
    • POJO는 객체지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용 될 수 있는 방식으로 설계되는 장점을 갖고 있음

객체 지향 설계 원칙(SOLID)

  • SRP : 단일 책임의 원칙 (Single Responsibility Principle)
    • 클래스는 단 한개의 책임(기능)을 가져야 한다는 원칙
    • 한 클래스가 수행할 수 있는 기능(책임)이 여러 개라면, 클래스 내부의 메서드끼리 강한 결합을 갖게 될 가능성이 커지게 됨
    • 객체 지향 설계의 핵심은 응집도는 높게, 결합도는 낮게 프로그램을 설계하는 것. 이에 책임(기능)을 잘게 쪼개어 분리시킬 필요가 있음
  • OCP : 개방 - 폐쇄 원칙 (Open-Closed Principle)
    • 확장에는 열려있어야 하고, 변경에는 닫혀 있어야 함
    • 기존의 코드를 변경하지 않고 기능을 수정하거나 추가할 수 있도록 설계해야 함
    • OCP는 추상화와 상속 등을 통해 구현해 낼 수 있음
    • 자주 변화하는 부분을 추상화 하여, 기존의 코드를 수정하지 않고도 기능을 확장시킬 수 있게 설계하여 유연성과 재사용성, 유지보수성을 높이는 것이 핵심
  • LSP : 리스코프 치환 원칙 (Liskov Substitution Principle)
    • 부모 객체와 자식 객체가 존재할 때, 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히
      대체할 수 있다는 원칙
    • 즉, 상속이 일어나면 하위 타입인 자식 객체는 상위 타입인 부모 객체의 특성을 가지며, 이를 바탕으로 확장시켜 나갈 수 있음을 의미
  • ISP : 인터페이스 분리 원칙 (Interface Segregation Principle)
    • 객체는 자신이 호출하지 않는 메소드에 의존하지 않아야 함
    • 만약 인터페이스의 추상 메서드들을 범용적으로 구현한다면, 그 인터페이스를 상속받은 클래스는 자신이 사용하지 않는 인터페이스라도 억지로 구현해야 하는 상황이 찾아올 수 있음
    • 즉, 클라이언트의 목적과 용도에 적합한 인터페이스만을 제공하기 위해 인터페이스를 잘게 분리하는 것
  • DIP : 의존관계 역전 원칙 (Dependency Inversion Principle)
    • 사용자가 상속 관계로 이루어진 모듈을 가져다 사용할 때, 하위 모듈의 인스턴스를 직접 가져다 쓰지 말고 상위 인터페이스 타입의 객체를 사용하라는 원칙
    • 하위 모듈을 가져다 사용하게 된다면, 해당 모듈에 변화가 있을 때마다 상위 모듈의 코드를 자주 수정해야 되기 때문