객체지향 프로그래밍이란?
- 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지 를 주고받고, 데이터를 처리할 수 있다. (협력)
- 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다.
객체지향의 특징 4가지
- 추상화
- 캡슐화
- 상속
- 다형성
역할과 구현으로 분리(다형성)
- 자바 언어의 다형성을 활용
- 역할 = 인터페이스
- 구현 = 클래스, 객체
- 단순해져 변경에 유연해진다.
- 클라이언트를 변경하지 않고, 서버의 유현기능만을 유연하게 변경 가능하다.
- 확장에 유연
- 인터페이스를 안정적으로 잘 설계하는 것이 중요하다
객체지향에선 다형성이 가장 중요한다.
스프링은 다형성을 극대화하여 사용할 수 있게 도와준다. ex) IoC, DI
SOLID
클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리
- SRP: 단일 책임 원칙(single responsibility principle)
- 한 클래스는 하나의 책임만 가져야 한다.
- 변경이 있을 때 파급효과가 적어야 한다.
- OCP: 개방-폐쇄 원칙 (Open/closed principle)
- 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
- 다음과 같이 다형성을 활용해 역할과 구현을 분리해도 서버단의 구현객체를 변경하려면 클라이언트 코드를 변경해야 한다.
MemberRepository m = new MemoryMemberRepository(); //기존 코드
MemberRepository m = new JdbcMemberRepository(); //변경 코드
- 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다.
- LSP: 리스코프 치환 원칙 (Liskov substitution principle)
- 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
- 부모 클래스의 행동규약을 자식 클래스가 위반하지 말아야 한다.ex) 오버라이딩 잘 못 하는 경우 :
1. 자식 클래스가 부모 클래스의 변수의 타입을 바꾸거나 메소드의 파라미터 또는 리턴값의 타입 or 갯수를 바꾸는 경우 2. 자식 클래스가 부모 클래스의 의도와 다르게 메소드를 오버라이딩 하는 경우
- ISP: 인터페이스 분리 원칙 (Interface segregation principle)
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
즉, 역할을 여러 개로 구별하여 쪼개자.
- DIP: 의존관계 역전 원칙 (Dependency inversion principle)
- 추상화에 의존해야지 구체화에 의존하면 안된다.
즉, 인터페이스에 의존하게 만들자.
- 위의 OCP 예제 코드도 구현에 의존되어 있다.
결론 : 다형성만으로는 OCP, DIP를 지킬 수 없다.
이를 spring에서 지원해준다.
'Spring > core' 카테고리의 다른 글
의존관계 자동 주입 (0) | 2022.04.23 |
---|---|
컴포넌트 스캔 (0) | 2022.04.03 |
싱글톤 컨테이너 (0) | 2022.04.02 |
스프링 컨테이너와 스프링 빈 (0) | 2022.04.02 |
스프링 핵심 원리 이해 - 객체 지향 원리 적용 (0) | 2022.04.02 |