본문 바로가기
Back-End/Spring

1.객체지향설계와 스프링

by 두두리안 2020. 12. 30.
728x90

1.객체지향설계와 스프링

  • 목차
    • 1.자바진영의 추운겨울과 스프링의 탄생
    • 2.스프링이란?
    • 3.좋은 객체 지향 프로그래밍이란?
    • 4.좋은 객체지향 설계의 5가지 원칙
    • 5.객체지향 설계와 스프링

1.자바진영의 추운겨울과 스프링의 탄생

EJB

  • 자바진영의 표준기술
  • 가격이 비쌈..
  • 진짜 어렵고 복잡하고 느리다

    스프링

  • EJB 컨테이너 대체
  • 단순함의 승리
  • 현재 사실상 표준기술

    하이버네이트

  • EJB 엔티티빈 기술을 대체
  • JPA 새로운 표준정의

    스프링의 역사

  • 2002년 로드존슨 책 출간 (EJB의 문제점 지적) 스프링의 핵심개념과 기반코드가 들어있다
  • 유겐힐러 와 얀카로프가 로드존슨에게 오픈소스 프로젝트를 제안
  • 2003년 스프링 프레임워크 출시 XML로 설정
  • 2014년 스프링부트 출시

2.스프링이란?

스프링의 핵심

  • 자바언어의 큰특징인 객체지향언어
  • 스프링은 객체지향언어가 가진 특징을 살려낸 프레임워크
  • 프레임워크 : 일정하게 짜여진 틀,뼈대를 가지고 일을하다
  • 스프링은 좋은 객체지향 애플리케이션을 개발할수있도록 도와주는 프레임워크

    스프링부트

  • Tomcat 같은 웹서버를 내장해서 별도의 웹서버 설치 안해도 된다
  • 스프링과 외부라이브러리 자동구성
  • 단독으로 실행가능한 스프링 애플리케이션 생성
  • start 종속성 제공
  • 매트리그,상태확인,외부구성같은 프로덕션 준비기능제공 (모니터링)

3.좋은 객체 지향 프로그래밍이란?

객체지향의 특징

  • 추상화 , 캡슐화 , 상속 , 다형성
  • 객체들의 모임으로 파악 각각의 객체는 메시지를 주고받고 데이터를 처리
  • 프로그램을 유연하고 변경이 용이하게 만들어서 대규모 소프트웨어 개발에 많이사용
  • 컴퓨터 부품을 갈아 끼우듯이 , 키보스 마우스를 갈아 끼우듯이

다형성의 실세계비유

  • 역할과 구현으로 구분
  • 운전자 - 자동차(k3 , 아반떼, 테슬라)
  • 자동차 - 인터페이스(역할)
  • K3,아반떼,테슬라 - 구현클래스(구현)
  • 클라이언트에 영향을 주지않고 바꿀수 있다
  • 공연무대 , 정렬알고리즘 , 할인정책 , 키보드마우스..

역할과 구현을 분리

  • 역할과 구현으로 분리되면 단순해지고 유연해지며 변경도 편리해진다
  • 클라이언트는 역할(인터페이스) 만 알면된다
  • 클라이언트는 구현을 몰라도 되서 내부구조가 변경되도 영향을 안받는다

자바언어

  • 역할 = 인터페이스

  • 구현 = 구현객체 (인터페이스를 구현한 클래스)

  • 객체설계시 역할을 먼저 부여 -> 역할을 수행하는 객체만듬

  • 오버라이딩!!

    image
  • service (save) -> Repository(save) -> MemoryMemberRepository(save) , JdbcMemberRepository(save)

    image
  • MemoryMemberRepository(save) , JdbcMemberRepository(save) 둘중 하나의 기능을 넣을수 있다

    image
  • 다형성은 클라이언트를 변경하지않고 서버의 구현기능을 유연하게 변경할수 있다

정리

  • 다형성을 통해서 유연하고 변경이 용이
  • 확장가능한 설계를 할수 있다
  • 클라이언트에는 영향을 안준다
  • 인터페이스를 안정적으로 잘설계하는것이 중요하다

스프링과 객체지향

  • 다형성이 중요
  • 스프링은 다형성을 극대화 해준다
  • 스프링에서는 제어의 역전(IoC), 의존관계 주입(DI) 은 다형성을 활용해서 역할과 구현을 편리하게 다룰수 있도록 지원

4.좋은 객체지향 설계의 5가지 원칙

SOLID (클린코드)

  • SRP:단일책임원칙
  • OCP:개방폐쇄원칙
  • LSP:리스코프치환원칙
  • ISP:인터페이스분리원칙
  • DIP:의존관계역전원칙

    SRP:단일책임원칙

  • 한클래스에는 하나의 책임을 가져야한다
  • 중요한기준은 변경 - 변경이 있을때 파급효과가 적으면 단일 책임원칙을 따른것

    OCP:개방폐쇄원칙

  • 소프트웨어 요소는 확장에 열려있으나 변경에는 닫혀야 한다
  • 다형성을 활용해서 인터페이스로 역할을 만들고 새로운 구현클래스를 만들어서 기능을 구현
  • 역할과 구현을 분리하는것!
    image
  • 문제점
    • 다형성을 사용했지만 OCP 원칙을 지킬수 없다
    • 구현객체를 변경하려면 클라이언트 코드도 변경되어야 한다...

      LSP:리스코프치환원칙

  • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위타입의 인스턴스로 바꿀수 있어야한다
  • 다형성에서는 하위클래스는 인터페이스 규약을 다지켜야한다는것
  • 인터페이스를 구현한 구현체는 믿고 사용하려면 이원칙이 필요하다
  • ex) 자동차 인터페이스의 악셀은 앞으로 가능기능 , 뒤로가게 구현하면 LSP 위반이다..

    ISP:인터페이스분리원칙

  • 특정클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나 보다 낫다
  • 인터페이스가 명확해지고 대체가능성이 높아진다

    DIP:의존관계역전원칙

  • 추상화에 의존해야지 구체화에 의존하면 안된다 (의존성 주입은 이원칙을 따른다)
  • 인터페이스를 의존하기
  • 역할에 의존하기
    image
  • 문제점
    • 인터페이스도 의존하지만 구현클래도 동시에 의존해서 DIP 에 위반된다

      정리

  • 객체지향의 핵심은 다형성
  • 다형성만으로는 OCP 와 DIP 를 지킬수 없다..

 5.객체지향 설계와 스프링

스프링

  • 스프링은 다형성 + OCP + DIP 를 가능하게 지원해준다 (DI)
  • DI : 의존관계,의존성을 주입
  • DI 컨테이너 제공
  • 클라이언트 코드의 변경없이 기능 확장

정리

  • 모든설계는 역할과 구현을 분리
  • 유연하고 변경이 가능할수 있도록 만드는것이 좋은 객체지향 설계
  • 모든설계에는 인터페이스를 부여하자
  • 인터페이스를 도입하면 추상화 비용이 발생(기능을 확장할 가능성이 없다면 구체클래스 -> 리팩터링해서 인터페이스 도입)

참고

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard (스프링핵심기술)

728x90

'Back-End > Spring' 카테고리의 다른 글

3.스프링 핵심 원리 이해2 - 객체지향원리적용  (0) 2021.01.01
2.스프링 핵심 원리 이해1 - 예제만들기  (0) 2020.12.31
7.AOP  (0) 2020.12.29
6.스프링 DB접근기술  (0) 2020.12.29
5.순수 JDBC 접근기술  (0) 2020.12.28