좋은 객체 지향 프로그래밍 (Spring 관점)

김지윤·2023년 2월 16일
0

Spring

목록 보기
7/10

객체 지향 프로그래밍 이란?
대규모 프로젝트를 할 때, 컴퓨터 프로그램들을 객체로 보아, 객체들이 모여 서로의 정보를 주고 받음으로서 개발을 유연하게 만들어준다.

핵심 기술

< 세상을 "역할"과 "구현"으로 분리 >

운전자는 자동차라는 인터페이스만 제대로 알고 있으면, 현대 자동차, 기아 자동차 등 자유롭게 사용할 수 있다.
-> 운전자에게 영향을 주지 않는다.
현대 자동차의 내부 구조를 몰라도 자동차만 알면 사용할 수 있다.

클라이언트는 인터페이스만 제대로 알고 있으면(의존하고 있으면), 그것에서 파생된 구현 클래스들은 자유롭게 사용할 수 있다.
-> 클라이언트에게 영향을 주지 않는다.
구현 클래스의 내부 구조를 몰라도 인터페이스만 알면 사용할 수 있다.

이 원리를 이용한 것이 자바 언어
인터페이스를 변경없도록 잘 설계하는것이 매우 중요하다.

웹 개발할 때, Spring을 왜 사용하는가?

Spring은 자바를 기반으로 사용할 수 있는데, 객체 지향 프로그래밍을 극대화할 수 있게 도와준다. IoC, dI를 통해 "도와준다."


이 좋은 객체 지향 설계에는 5가지 원칙이 존재한다

SOLID (면접에 나올 수 있는 질문)

  • Single responsibility principle (SRP) : 단일 책임 원칙
    변경이 있을 때 파급 효과가 적도록 되도록 하나의 클래스는 하나의 책임만 가져야 한다.
  • (중요) Open/closed principle (OCP) : 인터페이스의 다형성처럼 확장에는 열려있고, 변경에는 닫혀있어야 한다.
    -> 하지만 자바에서는 클라이언트의 코드를 건드려야지만 구현 클래스를 바꿔 끼울 수 있다. 이 문제를 도와주는 것이 Spring의 dI와 IoC이다.
  • Liskov substitution principle (LSP 리크코프 치환 원칙) : 컴파일이 된다고 원칙을 지킨 것이 아니다. 자동차 엑셀을 실행시켰을 때 값이 마이너스로 떨어지면 안되는 것처럼 규약을 지켜주어야 한다.
  • Interface segregation principle (ISP 인터페이스 분리 원칙) : 역할을 좀 더 전문적으로 여러개의 인터페이스로 분리하면, 그것에 맞는 클라이언트도 분리된다.
  • (중요) Dependency inversion principle (DIP 의존관계 역전 원칙) : 클라이언트는 추상화(인터페이스)에 의존하고, 구체화(구현 클래스)에 의존하면 안된다.

다형성만으로는 OCP, DIP를 지킬 수 없다. 해결 방법은?


** 의존 : 그 객체를 알고있어서 사용하고 있는 것

profile
꾸준하게 공부하고 기록하는 개발자

0개의 댓글