[스프링 핵심 원리 - 기본편] 객체 지향 설계와 스프링

changi123·2024년 12월 23일
1

공부

목록 보기
18/24

1. 강의 구매

다시 스프링을 돌아보기 위해 인프런 김영한 강사 스프링 핵심 원리 - 기본편을 구매했다👏 코테 + 강의 들으면서 고급편까지 완강해보자


2. 과거의 스프링

과거에는 현재의 스프링부트+지원하는 내장톰캣처럼 서버를 돌릴려해도 수천만원의 비용이 들었다.
이러한 현상으로 화가 상당히 많이 난 두명 개발자가 있었다😶 로드존슨 이 현재 스프링이 되는 책을 내고 개빈킹 이라는 사람이 현재 JPA에 시초이자 구현체인 Hibernate 책을 냄

3. 스프링이란 ?

(1) 스프링의 필수적 요소와 선택적요소

  1. 스프링 데이터 -> 기본적인 CRUD를 사용하기위한 것
  2. 스프링 세션 -> 세션 기능을 좀 더 편리하게 사용하기위한 것
  3. 스프링 시큐리티 -> 보안관련
  4. 스프링 Rest Docs -> API문서를 편리하게 만들기 위한 것
  5. 스프링 배치 -> 실무에서 많은양의 데이터를 쪼개서 업데이트를 하고 저장하기 위한 것

3.1 스프링프레임워크 vs 스프링부트 ( 가장 큰 차이 )
(1) 내장 톰캣을 활용해 웹서버를 따로 설치하지 않아도 웹어플리케이션을 실행 가능
(2) 개발자를 위한 간결한 설정


(2) 스프링을 왜 만들었을까 ? -> 왜 로드존슨과 개빈킹이 화가난걸까

  1. 스프링은 자바 기반의 프레임워크 -> 자바의 가장 큰 특징인 객체지향의 강력한 특징을 강화
  2. 결국 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크
  3. 스프링의 본질을 알자 ★★★★★★

(3) 좋은 객체 지향이란 ?

결국 유연하고 변경이 용이한 것
1. 다형성의 예시 : 운전자가 자동차를 운전할 수 있다면 차의 종류가 바뀌어도 운전이 가능하다.
-> 운전자가 자동차의 인터페이스를 이해하고 있기 때문에 가능
-> 결국 새로운 자동차가 나와도 운전자는 운전이 가능하다.
-> 역할과 기능으로 구분한다면 세상이 단순해지고, 유연해지면 변경도 수월해진다 ✔
-> 역시 오버라이딩과 오버로딩을 예로 드는게 가장 쉽다! ( 메소드에 대한 재사용과 재정의 )
-> 결국 다형성 / 상속 / 추상화 / 캡슐화 중 다형성이 가장 중요하다 ✔


(4) 객체 지향 설계의 5가지 원칙

4-1 SRP ( 단일 책임 원칙 )

  1. 한 클래스는 하나의 책임만 가져야한다. ( 하지만 하나의 책임이라는 것이 모호 )
  2. 유지보수 시 많은 책임을 가진다면 너무나도 힘든 경우가 생김

4-2 OCP ( 개방-폐쇄 원칙 )

  1. 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
  2. 다형성을 사용했지만 OCP 원칙을 지킬 수 없는 경우가 있다.
    -> 이때 스프링 컨테이너의 역할이 필요하다.

4.3 LSP ( 리스코프 치환 원칙 )

  1. 자동차의 엑셀을 밟으면 앞으로 가라는 기능이 있지만 뒤로 갈 수도 있다.
    -> 단순히 컴파일에 성공하는 것을 넘어서 LSP 위반을 통해 뒤로 갈 수도 있게 함

4.4 ISP ( 인터페이스 분리 원칙 )

  1. 운전 인터페이스, 정비 인터페이스로 분리
    -> 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.

4.5 DIP ( 의존관계 역전 원칙 )

  1. 프로그래머는 추상화에 의존해야한다. 절대 구체화에 의존하면 안된다.
    -> 결국 역할에 의존해야지 구현에 의존하면 안된다 ✔
    -> 하지만 클라이언트의 코드를 수정하며 DIP를 위반하는 경우가 생김

4. 결론

결국 순수 자바를 활용한 OCP, DIP 원칙을 지키면서 개발을 하다보면 스프링프레임워크 (DI 컨테이너) 가 필요하다.

기능을 확장할 가능성이 없다면, 구체 클래스를 직접 사용하고, 이후 꼭 필요할 때 리팩토링해서 인터페이스를 도입하는 것도 방법이다 !

profile
개발자 홍찬기 꾸준한 사람이 되자

0개의 댓글

관련 채용 정보