김영한님의 스프링 핵심 원리를 듣고 작성하였습니다.
객체 지향 특징
• 추상화
• 캡슐화
• 상속
• 다형성
객체 지향 프로그래밍이란?
• 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. (협력)
• 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 한다.
유연하고, 변경이 용이?
• 레고 블럭 조립하듯이
• 키보드, 마우스 갈아 끼우듯이
• 컴퓨터 부품 갈아 끼우듯이
• 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법
다형성을 실세계에 비유하자면 역할과 구분으로 나눌 수 있다.
위 그림에서 운전자(클라이언트)의 역할은 자동차(서버)에 타서 운전을 하는 것이다.
자동차의 역할은 목적지를 향해 나아가는 것이다.
자동차의 구현이 바뀌어도 운전자에게 영향이 가서는 안된다.
즉 서버가 바뀌어도 클라이언트에 영향이 가서는 안된다.
사람은 차량(서버)가 바뀌어도 차에 타고 운전을 한다는 역할은 같기 때문이다.
다형성의 예시를 실세계에 비유
• 운전자 - 자동차
• 공연 무대
• 키보드, 마우스, 세상의 표준 인터페이스들
• 정렬 알고리즘
• 할인 정책 로직
역할과 구현을 분리
• 역할과 구현으로 구분하면 세상이 단순해지고, 유연해지며 변경도 편리해진다.
장점
• 클라이언트는 대상의 역할(인터페이스)만 알면 된다.
• 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
• 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
• 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
자바 언어의 다형성을 활용
• 역할 = 인터페이스
• 구현 = 인터페이스를 구현한 클래스, 구현 객체
• 객체를 설계할 때 역할과 구현을 명확히 분리
• 객체 설계시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기
객체의 협력이라는 관계부터 생각해야한다.
혼자 있는 객체는 없다. 클라이언트는 요청을하며, 서버는 응답한다.
객체 클라이언트와 객체 서버는 서로 협력 관계를 가진다.
자바 언어의 다형성
오버라이딩을 통해서 자바의 다형성을 구현 가능하다.
[MeberService]
private MemberRepository memberRepository = new MemoryMemberRepository(); //1번
private MemberRepository memberRepository = new JdbcMemberRepository(); //2번
위와 같이 인터페이스로 구현된 MemberRepository에서 객체를 변경하는 것으로 쉽게 구현할 수 있다.
스프링과 객체지향
객체 지향에서는 다형성이 가장 중요하다.
스프링은 다형성을 극대화하여 이용할 수 있게 도와주는 프레임워크다.
스프링에서 말하는 IOC와 DI는 다형성을 활용해 역할과 구현을 편하게 다룰 수 있도록 지원한다.
'Languege > Java & Spring' 카테고리의 다른 글
[김영한 스프링] 스프링 핵심 원리 이해 (0) | 2022.03.08 |
---|---|
[JAVA] 자바 Static (0) | 2022.03.05 |
좋은 객체 지향 설계의 5가지 원칙 (SOLID 원칙) (0) | 2022.03.01 |
AOP란? (0) | 2022.02.01 |