스프링 핵심 컨셉이 뭘까?

wisdom·2022년 7월 25일
0

스프링 핵심 컨셉이 뭘까?

  • 스프링은 자바 언어 기반의 프레임워크이고 기반 언어인 자바는 객체지향이라는 특징을 가진다. 즉 스프링은 자바 언어를 이용해서 객체지향적으로 개발할 수 있게 틀을 제공해주는 도구다.

객체 지향 프로그래밍

  • 객체들의 모임
  • 메시지를 주고받는다.
  • 협력
  • 유연하고 변경이 용이
    • 다형성
  • 역할과 구현으로 분리
    • 클라이언트는 인터페이스인 역할만 알면 되고, 내부구조가 변경되든 알 필요도 없다.
    • 역할: 인터페이스
    • 구현: 인터페이스를 구현한 클래스, 구현 객체
    • 클라이언트가 인터페이스의 역할을 알기 때문에 그 인터페이스가 변하면 코드 변경이 많이 발생한다.
      • 따라서 인터페이스를 잘 설계하는 것이 정말 중요하다.

스프링에서 제어의 역전(IOC), 의존관계주입(DI)의 개념은 대체 왜 있을까?

  • 다형성 을 활용하기 위해서다.
  • 다형성을 활용해서 위에서 말한 역할과 구현을 쉽게 다루기 위해서!

SOLID: 객체지향 설계의 5가지 원칙

SRP

  • single responsibility priciple
  • 1클래스 1책임

OCP

  • open/closed priciple
  • (새로운 클래스로 기능 구현해서)확장에는 열려 있고 (기존 코드)변경에는 닫혀 있어야해!
    • 다형성 활용
    • 인터페이스를 구현한 새로운 클래스로 새로운 기능 구현
    • 애플리케이션을 사용 영역과 구성 영역으로 나눴을 때 소프트웨어 표소를 새롭게 확장해도 사용 영역의 변경은 닫혀 있다!

LSP

  • liskov substitution priciple
  • 부모 객체 메소드를 오버라이딩할 때 기존 의도를 지킬 수 있을 때만 상속받아야 해

ISP

  • interface segregation priciple
  • 커다란 크기의 범용 인터페이스말고 덩어리가 작고 특정 지을 수 있는 인터페이스가 낫다.

DIP

  • dependency inversion priciple
  • 추상화 의존 YES, 구체화 의존 NO
    • 구현 클래스에 의존하는 건 좋지 않다. 인테페이스에 의존해!
      • 의존한다는 건 내부 코드를 안다는 것
      • 청소기 power 버튼을 누르면 모터가 돌아가면서 청소기를 돌릴 수 있게 되는데 내부적으로 어떻게 동작하는지는 청소기를 사용하는 사용자는 알 필요가 없다. "power 버튼을 누르면 청소기를 쓸 수 있다."만 알면 된다.

그런데 다형성만으로는 클라이언트 코드의 변경을 막을 수 없다?

  • 스프링에서 DI로 가능하게 만든다.
    • DI(Dipendency Injection)
    • DI 컨테이너 제공

회고

  • 다형성이 정말 중요한 개념이라고 느꼈다.
profile
문제를 정의하고, 문제를 해결하는

0개의 댓글