객체지향 프로그래밍의 패러다임 등장 전
절차지향 프로그래밍이 있었다
- 초기의 프로그래밍 언어는 일반적으로 절차적 언어였음. ex) C, Fortran ...
- 절차적 언어 : 순차적 명령의 조함
OOP : Object Oriented Programming
- ex) C#, Java, Ruby, Python, C++, Objectivc-C, Kotlin, TS
- JavaScript, Python - 객체지향 아닌 언어도 객체지향언어방식을 지원하고 있음
추상화 : 객체의 공통 속성,기능을 클래스로 정의하는 것
ex) 자동차의 엔진, 바퀴, 차문 등 필수적인 공통 부분
내부는 복잡한데 노출되는 부분은 단순한 것.
인터페이스(메서드,속성만 정의한 클래스)의 단순화
하지만 interface 키워드는 JS는 없고 TS에 있다.
데이터(속성) - 기능(메소드)을 하나로 묶는 캡슐화
외부에서 직접 접근하는 것이 아니라 함수를 통해서만 접근해야한다
정보 은닉 Information hiding
- 은닉 hiding : 구현을 숨기고, 동작은 노출시키기
- 캡슐화된 객체 내부는 숨겨서 외부에서 접근하지 못하게 하는 것
- 높은 응집도와 낮은 결합도로, 유연한 변경과 재사용이 가능해지며 유지보수성이 높아진다
- 객체 간 소통할 때 세부 내용은 몰라도 되므로 인터페이스가 단순해지고 객체 간 결합도가 낮아진다
- getter/ setter로, 값을 불러오는/값을 설정하는 함수를 사용하여 직접적인 접근을 막는다.
- JS엔 private키워드 역할을 하는 #키워드가 있지만 지원하는 브라우저가 적다.
느슨한 결합 Loose Couplig 유리
- 언제든지 구현 수정 가능
재사용성을 높인다
예시1. 운전자 - 자동차
운전자는 k3, 아반떼, 테슬라- 자동차 바꿔도 운전할 수 있다.
클라리언트에 영향을 주지 않고 새로운 기능을 무한히 확장 가능하다.
예시2. 로미오와 줄리엣 공연무대
로미오 역할(원빈, 디카프리오...)과 줄리엣 역할(김태희, 송혜교...) 배우가 없을 시 다른 배우로 교체할 수 있다. 역할과 구현을 나누면 변경가능한 대체가 가능하다
- interface 인터페이스
: 클래스들이 구현해야 하는 동작을 지정하는데 사용되는 추상 자료형- Class 클래스
: 특정 객체를 정의하여 생성하기 위한 설계도 혹은 틀.
- 객체 정의 하기 위한 변수와 메서드(함수)로 구성된다- instance 인스턴스
: 설계도대로 소프트웨어에 구현된 구체적인 실체.
- 인스턴스는 객체에 포함된다
- 실체화된 인스턴스는 메모리에 할당된다- Object 객체
: 클래스에 정의된대로 생성된 실체. '클래스의 인스턴스'라고도 부른다
<예시>
클래스 = 붕어빵 틀
객체 = 붕어빵
인스턴스 = 각각의 붕어빵
=>팥붕어빵, 슈크림붕어빵은 같은 타입의 객체지만, 인스턴스로 봤을 땐 다르다
스프링 핵심 원리 - 기본편 (김영한) 를 참고하여 작성함