Annotation
(공식 문서: https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/package-summary.html)
- Spring에서는 Java의 reflection을 사용해서 기능을 실시
- 자바의 기능을 유연하게 동작하기 위해 사용한다.
Object-Oriented
- '객체지향 시스템은 협력하는 객체들의 연결망이다. Freeman, 2009'
- 객체 ---- 협력 ----- 객체 ---- 객체 ----- 협력 ----- 객체
- 객체? Object
- 객체가 각각의 역할과 책임이 있고 메세지로 상호작용해서 협력해나가는 것.
- 객체(역할/책임) ---- 메시지 ---- 객체(역할/책임) ---- 객체(역할/책임) ---- 메시지 ---- 객체(역할/책임)
- 커피주문 기능
- 바리스타는 주문을 받고, 커피를 만들 책임이 있음. 고객은 어떻게 커피를 만드는지 알 필요가 없음.
- 바리스타
- 이름
- 주문받기
- 아아만들기
- 라떼만들기
- 고객
- 주문하기
- 바리스타
- 고객 -- (주문 메세지 -> '요청') -- 바리스타
- 바리스타 메시지 수신 커피 줌.
- 고객 -- (주문 메세지 -> '요청') -- 요리사
- 바리스타는 주문을 받고, 커피를 만들 책임이 있음. 고객은 어떻게 커피를 만드는지 알 필요가 없음.
- 바리스타 역할
- 고객 역할
- 고객
- 바리스타가 뭘 하든 알바 아님. 커피만 받으면 된다.(캡슐화)
- 인터페이스
- UI, GUI, CLI, API
- 화면 -- 상호작용 -- 유저
- 특징
- 내부 어떻게 동작하는지 알 필요 없음.
- 버튼 누르기(메시지) 전달 ---> 화면 제대로 동작할 책임 (역할)
- 인터페이스만 유지하면, 내부에서는 바꾸는 거 외부에서는 알 필요 없음.
- 인터페이스 메시지를 주고 상호작용
- 내부 어떻게 동작하는지 알 필요 없음.
- 객체의 인터페이스는 객체가 수신할 수 있는 메시지 목록으로 구성됨.
객체가 어떤 메시지를 수신할 수 있는지가 객체가 제공하는 인터페이스의 모양을 빚는다.
실제
- 고객 ooo님이 바리스타 A에게 커피주세요라고 메시지를 보냄
- 요청을 받고(수신) 커피 줌.
- 바리스타 - class
- 바리스타 A - 객체 object(인스턴스)
- 바리스타 B - 객체 object(인스턴스)
- 고객 ooo - 바리스타 B에게도 주문 가능
- 다형성
- 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미함.
- 객체들이 대체가능성을 사용해서 설계 유연 재사용
- 다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나
- 자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있다.
- ex) 객체 A, 객체 B는 다른 사람 but 같은 일을 한다(음료제조).
고객이 A나 B에게 주문을 하면 A와 B는 다른 사람이지만 음료를 만드는 일은 동일.
- 추상화
- 해당 클래스의 필요한 정보, 동작을 모델링 해보는 것.
- ex) class user(고객) { 전화번호, 주소, 쿠폰보유여부, 적립금, 위치정보/ 동작: 주문하기() }
고객의 키와 몸무게는 없어도 된다.(필요없는 것과 필요한 것을 생각해보고 속성을 채운다.)
- > spring
class 예시
힙스터바리스타 extends 바리스타 {
//overriding
함수 정의
}
- 고객 입장에서는 힙스터바리스타 김씨에게 주문하나 바리스타 유씨에게 주문하나 똑같음.
- 힙스터 바리스타
- 인터페이스
- 운전자 - 자동차
- Class 자동차 포르쉐
- Class 자동차 테슬라
- Class 자동차 람보르기니
- 운전자 - 포르쉐 A
- 자동차 연소과정 알 필요 없음.
- 운전만 하면됨.
- 운전자 - 테슬라 B
- 면허 다시 딸 필요 없음.
- 운전만 하면됨.(각 역할에 충실)
'Framework > Spring' 카테고리의 다른 글
Spring 서버 만들기 (0) | 2021.11.18 |
---|