Hyunebee

스프링 핵심 원리 이해 - 객체 지향과 스프링 본문

Spring

스프링 핵심 원리 이해 - 객체 지향과 스프링

Hyunebee 2022. 1. 4. 12:31

스프링의 진짜 핵심은??

1. 스프링은 자바 언어 기반의 프레임워크이다.

2.자바 언어의 가장 큰 특징 - 객체 지향 언어이다.

3.스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크이다.

 

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

컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립적인 단위 객체들의 모임으로 파악하고자 하는 것이다.  -> 이렇게 개발을 하면 프로그램을 유연하고 변경이 용이하게 만들 수 있게 된다.

 

객체 지향의 특징

1. 캡슐화

2. 추상화

3. 상속

4. 다형성 -> 스프링에서 중요 

 

다형성

 

스프링에서 다형성 

역할구현으로 세상을 구분한다. --> 역할(interfacae) 구현(object , class)

 

역할과 구현을 분리하면 좋은점

 

1. 사용자는 대상의 역할만 알면 된다.

2. 사용자는 구현 대상의 내부 구조를 몰라도 된다.

3. 사용자는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.

4. 사용자는 구현 대상 자체를 변경해도 영향을 받지않는다.

 

 

그림을 보면 사용자는 자동차를 작동하는 기본적인 방법만 알면된다. 차종류가 뭐든지 기본적인 운전만 할줄 안다면 구현체인 자동차는 뭐든 상관없다.

 

 

자바에서의 활용 -> 오버라이딩

MemberRepository라는 역할은 Memory와  Jdbc 두개의 구현체를 가지고있다.

사용자는 필요에 따라 두개의 기능을 모두 사용할 수 있다. 

 

다형성의 본질

1. 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.

2. 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.

 

 

좋은 객체 지향 설계의 5가지 원칙(SOLID) 와 Spring

1. SRP : 단일 책임의 원칙

 한 클래스는 하나의 책임만 가져야 한다.

 변경에 민감하면 안된다.

 

2. OCP : 개방 폐쇠의 원칙

 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. -> 기존 코드의 변경없이 변경이 가능 !(다형성을 활용)

 

3. LSP : 리스코프 치환의 원칙

 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다

 

4. ISP :  인터페이스 분리의 원칙

 

5. DIP : 의존관계 역전 원칙

 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 의존성 주입은 이 원칙 을 따르는 방법 중 하나다.

 역할(Role)에 의존하게 해야 한다는 것과 같다. 객체 세상도 클라이언트 가 인터페이스에 의존해야 유연하게 구현체를 변경할 수 있다!

 

 MemberRepository m = new MemoryMemberRepository(); -> 다형성을 활용했지만 OCP와 DIP를 위배한다.

 

생각해보면 Memory와 jdbc 두개의 기능을 사용할 수 있다. 만약 사용 기능을 변경하며려 우리는 구현 코드를 변경해야한다. 여기서 OCP를 위반한다. 그리고 클라이언트가 구현 클래스를 직접 선택하게 됨으로 DIP도 위반하게 된다. 즉 인터페이스와 구현클래스(서비스)에 동시에 의존하게 된다. --> 다형성 만으로는 OCP와 DIP를 지킬 수 없다. 하지만 스프링을 사용하며 OCP와 DIP를 가능하게 해준다.

 

 

 

스프링 핵심 원리 - 기본편

 

스프링 핵심 원리 - 기

스프링 핵심 원리 - 기본편스프링 핵심 원리 - 기본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