스프링 핵심원리 기본편
좋은 객체 지향이란?
객체지향 프로그래밍이란
- 객체지향 프로그래밍은 프로그램을 명령어의 집합 이란 시각에서 벗어나 각각 독립된 단위 객체들의 모임으로
파악하고자 하는것이다
- 각각의 객체는 메시지를 주고받고 데이터를 처리 할 수 있다
- 프로그램을 필요에 따라 부분적으로 교체 가능하기에 유연하고 변경이 용이해진다
다형성
- 하나의 객체가 여러가지 타입을 가질수 있는것
- 인터페이스: 역활, 구현한 클래스: 구현
- 역활과 구현으로 구분하면 세상이 단순, 유연, 변경이 편리해진다
- 장점
- 클라이언트는 대상의 역활만 알면됨, 내부 구조는 몰라도됨, 내부 구조가 변경되도 영향 받지 않음
- 구현 대상 자체를 변경해도 영향을 받지 않음
- 핵심
- 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경가능
- 본질은 객체끼리 협력 한다는것
- 클라이언트를 변경하지 않고 서버의 기능을 유연하게 변경할 수 있다
SOLID
- SRP: 단일 책임의 원칙
- 한 클래스는 하나의 책임만 → 한가지 일만 잘해라
- 중요한 기준은 변경이다 → 변경시 파급 효과가 적으면 단일 책임원칙을 잘 따른것
- OCP: 개방 폐쇄의 원칙
- 소프트웨어요소는 확장에는 열려있으나 변경에 닫혀있어야함
→ 기초적인 추상화 단계가 잘 구성되어있다면 확장 가능하지만 변경할 일은 없다 → 변경하면 난리남;
- LSP: 리스코프 치환의 원칙
- 자식은 부모의 역활을 대신 할 수 있어야한다
- 다형성에서 인터페이스를 구현한 클래스는 반드시 인터페이스의 규약을 다 지켜야한다
- ISP: 인터페이스 분리의 원칙
- 특정 클라이언트를 위한 인터페이스 여러가개 범용적인 인터페이스 하나보다 낫다
- 하나로 뭉쳐서 사용하면 대체하기 어렵고 명확하지 않지만 분리가 되어있다면 명확하고 대체 하기 쉽다
- DIP: 의존관계 역전의 원칙
- 추상화에 의존해야지 구체화에 의존하면 안된다 → 역활에 의존하자
- 구현체에 의존하게 된다면 변경이 매우 어려워진다
실무 고민
- 인터페이스는 추상화 라는 비용이 발생함
- 기능이 확장할 일이 없다면 구현체를 바로 만들고 향후 꼭 필요할때 리팩토링 하며 인터페이스를 도입하는것도 방법이다.