객체지향이란?
C언어, 포트란 등 초기의 프로그래밍 언어를 사용하던 시절 절차지향 프로그래밍이 주를 이루었습니다. 그 당시 프로그래밍은 단순한 순차적인 명령어의 조합이었습니다.
객체지향이란 개념은 1970년대에 용어가 나오기 시작했습니다. 기존의 절차 지향 언어의 경우 컴퓨터의 발전에 따라 프로그램 복잡도가 증가하면서 유지보수, 개발기간 등 비효율이 발생하였고 더 효과적인 개발방식으로 객체 지향을 채택하하고 있습니다.
객체 지향언어에서는 단순히 별개의 변수와 함수로 순차적으로 작동하는 것을 넘어, 데이터의 접근과, 데이터의 처리 과정에 대한 모형을 만들어 내는 방식을 고안해냈습니다.
객체 지향을 위한 대표적인 언어는 java, C++, C# 등이 있으며, 자바스크립트는 객체지향 언어는 아니지만 객체지향을 구현할 수 있습니다.
객체의 세가지 요소
- 상태 유지 : 객체는 상태 정보를 저장하고, 유지되어야하며 속성은 변수로 정의하고 속성 값을 변경하여 객체 상태를 변경합니다.
- 기능제공 : 객체는 기능을 제공해야하며, Method의 제공으로 이루어 진다. 외부로 부터 직접 속성에 접근하는 것이 아닌 객체 제공하는 Method로 기능이 제공되어야 합니다.
- 고유 식별자 제공 : 각각의 객체는 고유한 식별자를 가져야 합니다.. 예를들어 학생의 경우 학번, 계좌의 경우 계좌번호 등 고유한 값을 줄 수 있습니다.
객체지향의 특성 4가지
캡슐화
데이터와 기능을 하나의 단위로 묶는 것을 의미하며, 내부 데이터나 구현을 은닉하여 외부로 노출되지 않도록 할 수 있습니다.
[예시]
- Getter / Setter Method
- CRUD Method
- Business Logic Method
- 객체의 생명주기 처리 Method
- 객체의 영구성 관리 Method(pivate 선언)
추상화
객체지향에서 추상화는 모델링을 의마하며, 공통적인 부분 또는 특징을 추출하여 재조합하는 것 입니다.다 형성, 상속 등도 추상화에 속합니다.
상속
객체지향에서 상속은, 속성의 상속이 아닌 하위로 내려갈 수록 구체화 되는 것을 의미하며, 부모 클래스의 특징을 자식 클래스가 물려 받는 것 입니다.
⇨ 상속의 효과 : 재사용성 향상, 확장성 향상, 유지보수성 향상됩니다.
다형성
다형성은 하나의 개체가 여러개의 형태로 변화하는 것으로 오버라이딩을 통해 다형성을 나타낼 수 있습니다.
객체지향 설계 5원칙[SOLID]
- SRP(Single Responsibility Principle), 단일 책임원칙
⇨ 어떠한 클래스를 변경해야하는 이유는 한가지 뿐이여야 합니다.
- OCP(Open Closed Principle), 개방폐쇄 원칙
⇨ 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 합니다.
ex)t 상위 클래스 또는 인터페이스를 중간에 둠으로써, 자신은 변화에 폐쇄적이지만, 왼터페이스 외부의 변화에 대해서 확장을 개방해 줄수 있습니다.
- LSP(Liskov Substitution Principle), 리스코프 치환 원칙
⇨ 서브 타입은 언제나 자신의 상위 타입으로 교체 할 수 있어야 합니다.
- ISP(Inteface segregation Principle), 인터페이스 분리 원칙
⇨ 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 됩니다.
- DIP(Dependency Inversion Principle), 의존 역전 원칙
⇨ 자신보다 변하기 쉬운것에 의존하지 말아야 합니다.