다형성 : Polymorphism
하나의 코드로 다양한 타입의 객체를 처리하는 기술 : 인터페이스를 기반으로 한 구현 클래스로 다른 일을 할 수 있도록 하는 것 -> 오버라이딩을 통해 가능하다.
스프링을 이용하여 개발을 할 때는 객체 지향 프로그래밍 기법으로 개발을 해야한다.
역할과 구현을 구분하여 한 가지 클래스에 너무 많은 Task를 부여하지 않는다.
자바에서는
역할 = 인터페이스
구현 = 인터페이스를 구현한 클래스, 구현 객체
객체를 설계할 때 역할과 구현을 명확히 분리하여 역할(인터페이스를)설계한 후, 그 역할에 대한 구현체(클래스)를 설계한다.
위에 말처럼 하면 이해하기 쉽지 않으니 간단한 실생활 예로 들어보자면,
객체는 하나의 컴퓨터 본체 안에 있는 CPU, RAM, SSD, 쿨러 등 본체를 이루고 있는 하나의 부품이 하나의 객체라고 생각하면 된다.
만약 절차 지향으로 컴퓨터를 만든다고 치면 컴퓨터의 부품을 교체하기 위해서는 컴퓨터 제작을 처음부터 다시 진행해야할 수도 있다. 하지만 객체 지향으로 코드를 짜면 컴퓨터 부품을 변경해야할 때 컴퓨터 전체를 뜯어고치는 것이 아닌 부품 하나만(객체만) 변경하면 되기 때문에 유지보수에도 큰 장점을 줄 수 있다.
좋은 객체 지향 설계의 5가지 원칙(SOLID)
1. SRP : 단일 책임 원칙
- 한 클래스는 하나의 책임만 가져야한다.
- 기준을 변경이라고 생각하여 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것
2. OCP : 개방-폐쇄 원칙
- 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
- 다형성을 활용하여 인터페이스(역할)과 구현을 달리 한다.
3. LSP : 리스코프 치환 원칙
- 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야한다.
- 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야한다는 것, 단순한 컴파일 성공을 의미하는 것이 그 넘어서 를 의미
ex) 자동차 인터페이스의 엑셀은 앞으로 가라는 기능, 뒤로 가게 구현하면 LSP 위반, 느리더라도 앞으로 가게 구현
4. ISP : 인터페이스 분리 원칙
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다
- 인터페이스가 명확해지고, 대체 가능성이 높아진다
5. DIP : 의존관계 역전 원칙
- 프로그래머는 "추상화에 의존해야지, 구체화에 의존하면 안된다." 의존성 주입은 이 원칙을 따르는 방법 중 하나
- 구현체에 의존하는 것이 아닌 역할에 의존해야한다.
'Spring > Spring Core Basic' 카테고리의 다른 글
비즈니스 요구사항과 설계 (0) | 2022.01.21 |
---|---|
자바 프로젝트 생성 (0) | 2022.01.21 |
자바 코드로 직접 스프링 빈 등록하기 (0) | 2022.01.06 |
컴포넌트 스캔과 자동 의존관계 설정 (0) | 2022.01.06 |
회원 서비스 테스트 (0) | 2022.01.05 |