객체 지향 기술의 발전
OOP -> 컴포넌트 -> 분산 컴포넌트 (스프링) ->
서비스 기반 아키텍처 -> 마이크로 서비스 아키텍처 (MSA) ->
스프링 MSA
OOP -> MVC 아키텍쳐 -> DI
객체지향
- 전체코드 3만줄이 클래스 하나인 경우? 객체지향일까? 아닐까?
- 캡슐화 / 재활용 조건만 충족하면 아닐 이유는 없었다. 그러나 객체지향 정의의 변화
디자인패턴 (Best Practice:최선책) -> 어떻게 쪼갤 것인가?
- MVC (Model-View-Contoller) 패턴
- 모바일/PC 동시대응 가능
✔ 화면구성에 이점
✔ 내용이 같은 모바일과 pc사이트 -> MVC 패턴 사용!
✔ View를 하나 더 만들면 된다!
- MVVM(Model-View-ViewModel) - 스프링은 여기에 정착
- DI (Dependency Injection) 패턴
- 전략 패턴(디자인 패턴)
- 인터페이스 기반 패턴
제어의 역전 (IoC)
- 메인 코드를 프레임 워크의 가이드에 따라 짠다.
- Inversion of Control
- 프레임워크/WAS/미들웨어 등이 주로 사용
- 제어의 권한을 넘기고 필요한 기능(메소드/함수)만 구현하는 형태
- 프레임워크는 정해진 (콜백) 메소드를 호출하면 사용자의 코드가 호출되는 구조
UML 기본
의존성 주입(DI)
- Dependency Injection
- 디자인 패턴의 전략패턴(Strategy Pattern)
- 필요한 의존성 오브젝트를 정해진 시점에 공급
- 의존성이 없는(최소화한) 프로그램을 작성하라
- 프로그램 실행단계에서 결정
- Ex) MySQL / Oracle 어떤 DB도 사용할 수 있도록 프로그램 작성
프로그램 실행단계에서 MySql을 주입하면 MySql이 실행된다.
POJO (Plain Old Java Object)
회사에서 객체지향이란 무엇인가 묻는다면? -> POJO
객체지향기술의 심화(POJO)
- 자바객체지향의 특징 및 정신을 요약
- 클래스/인터페이스로 구현할 수 있는 방법을 모두 제공
- 특정한 기술/규약에 의존 배격
- POJO의 열렬한 지지자
- Spring Framwork / My Batis
객체지향의 정의
- 상속/캡슐화
- POJO(궁극적인 객체지향)
- 특정 클래스를 상속받아야 함(X)
- 자바는 단일상속이라 제약 발생 (파이썬은 다중상속)
- Ex) Thread 생성 -> [ Thread 클래스 상속 | Runnable 인터페이스 상속 ] 선택
- 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 재활용될 수 있는 방식으로
- 스프링 삼각형 = DI + AOP + PSA
출처 : https://jinpyo900.tistory.com/55
객체지향 분석설계 (OOAD)
어떤 코드가 SOLID 스러운가? -> DI + AOP + PSA로 짰으면 SOLID 스러운 코드이다.