[Spring] 객체지향 프로그래밍이란?

이신영·2023년 6월 29일
1

Spring

목록 보기
3/16
post-thumbnail

문득 생각없이 스프링을 쓰다가 OOP를 잊을거같아서 다시금 정리해보는 시간을 가져보자

근데 스프링 이거 왜 씀?

짧게 생각해보면 스프링이란 객체지향을 잘 쓸수있는 프레임워크다. 그말인 즉슨, 우리가 스프링을 잘 쓰려면? 객체지향프로그래밍(OOP)을 잘 해야한다..! (당연한 소리😅)


객체지향 프로그래밍

서두에 쓰길, 내가 생각하는 OOP는 역할(Interface)구현이 핵심이다. 이것은 곧 다형성이며 이 두개를 잘 분리해야 좋은 OOP라고 말할 수 있겠다. 이점을 늘 잊지말자! 나한테 하는말이다 😅

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

SOLID

객체지향하면 맨날 들어보는 단어다. 이걸 정리해보면

SRP: 단일 책임 원칙

  • 하나의 클래스는 하나의 책임만 가진다. 이는 어떤 변화로 클래스를 변경해야하는 이유는 하나뿐이여야한다는것. 그래야 독립적인 코드를 작성할수있다.
  • 만약 어떤 클래스를 변경했을 때 연쇄적인 변경이 적다면 SRP를 잘 따랐다는 뜻.

OCP: 개방-폐쇄 원칙

  • 확장은 열려있지만 변경은 닫혀있어야함. 즉, 기존코드를 수정하지않아도 새로운 기능을 추가할수있어야함.
  • 만약 결제서비스 클래스가 여러방법의 지불 방식을 처리하는데, 새로운 지불방식이 추가될 때마다 결제서비스 클래스를 수정해야한다면 OCP를 위반하는 행위.
  • 컨트롤러는 확장은 열려있지만 변경은 닫혀있음. 변경은 서비스에서 해서 OCP를 지킬수있다

LSP: 리스코프 치환 원칙

  • 자식클래스는 언제나 부모클래스를 대체할수있어야함. 즉, 부모클래스를 사용하는곳은 자식클래스를 대신 사용해도 정상적으로 작동해야함.
  • 직사각형 Rectangle 클래스와 정사각형 Square 클래스가 있다고 가정하자. 정사각형은 직사각형을 상속하는 관계로, 위 원칙을 위반하지 않는다면 Square 클래스가 Rectangle 클래스를 대체할 수 있어야하는데 Rectangle은 가로, 세로길이를 따로 설정할수있지만 Square는 가로, 세로길이가 항상 같으니까 LSP를 위반한다고 볼 수 있다.

ISP: 인터페이스 분리원칙

  • 클라이언트는 사용하지않는 인터페이스에 의존해서는 안된다. 즉, 클래스가 자신이 이용하지 않는 메소드를 의존하면 안된다는 말.
  • 교통수단 클래스를 상속받는 자동차 클래스와 비행기 클래스가 있다고 가정하자. 교통수단 클래스는 운전, 비행 메소드를 가지고있다면 자동차 클래스는 비행 메소드를 쓸 일이 없고 비행기 클래스는 운전 메소드를 쓸 일이 없지만 강제로 상속받는다. 이렇게 코드를 작성하면 필요하지도 않는 메소드들을 일일히 오버라이딩해서 개발 편의성이 내려감.

DIP: 의존관계 역전 원칙

  • 고수준 모듈은 저수준 모듈에 의존해서는 안되며 둘 모두 추상화에 의존해야한다. 즉, 추상화된 인터페이스나 추상 클래스에 의존해야하며, 구체적인 구현에 의존하지 않아야한다.
  • 예를들어 UserService가 UserRepository에 직접 의존한다면 DIP위반이다. 대신 UserService는 UserRepository 인터페이스에 의존하고 실제구현은 UserRepository 인터페이스를 구현한 클래스에서 제공하도록 설계해야함.
  • 쉽게말하면 고수준 모듈은 저수준 모듈의 구현에 의존하지말고 추상화한 인터페이스에 의존해야한다는 것?

나중에 코드예시도 들어야겠다~ 천천히 정리하겠음

profile
후회하지 않는 사람이 되자 🔥

0개의 댓글