먼저 객체 지향 프로그래밍이란 인간 중심적 프로그래밍 패러다임이라고 할 수 있습니다. 현실 세계의 사물들을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 프로그래밍 하는 것이다. 객체는 속성과 기능으로 이루어져 있다.
장점과 단점
💡장점
- 모듈화, 캡슐화로 인해 유지보수에 용이하다.
- 객체 자체가 하나의 프로그램이기에 재사용에 용이하다.
- 에러를 컴파일 단계에서 잡아낼 수 있으므로 버그 발생이 줄어듦.
- 데이터 모델링을 할 때 객체와 매핑하는 것이 수월하기 때문에 요구사항을 보다 명확하게 파악 가능하다.
💡단점
- 대부분의 객체지향 프로그램은 속도가 상대적으로 느려지고, 메모리를 많이 사용하는 경향이 있다.
- 객체 간의 정보 교환이 모두 메시지 교환을 통해 일어나므로 실행 시스템에 많은 overhead가 발생한다.
- 코드를 설계하고 작성하는데에 많은 시간이 소요된다.
4가지 특징
- 추상화
- 어떤 대상/집단의 공통적이면서 본질적인 특징을 추출하여 정의하는 것 - 상속
- 상위 클래스의 모든 것을 하위 클래스가 이어받는 것.
- 기존에 구현한 클래스를 재활용 함으로써 코드 재사용성을 높일 수 있음. - 다형성
- 어떤 객체의 속성이나 기능이 상황에 따라 여러 형태로 변할 수 있다는 것을 의미
- 메서드 오버라이딩/오버로딩이 있다.
- 오버로딩 : 같은 이름의 메서드 여러개를 가지면서 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있게 하는 기술
- 오버라이딩 : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용 - 캡슐화 : 데이터와 코드의 형태를 외부로부터 알 수 없게하고, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만드는 방법
객체 지향 설계의 5원칙 S.O.L.I.D
- SRP(Single Responsibility Principle) : 단일 책임 원칙
- 클래스는 단 하나의 책임만 가져야 한다는 원칙
- 책임은 하나의 '기능 담당' 으로 보면 됨.
- 한 책임의 변경으로부터 다른 책임이 변경이 되는 연쇄작용 방지. - OCP(Open Closed Principle) : 개방 폐쇄 원칙
- 확장에 열려있어야 하며 수정에는 닫혀있어야 한다는 원칙
- 새로운 변경 사항이 발생했을 때
- 유연하게 코드를 추가함으로써 애플리케이션 기능을 확장. (확장에 열려있음)
- 객체를 직접적으로 수정을 제한함. (수정에 닫혀있음) - LSP(Listov Substitution Principle) : 리스코프 치환 원칙
- 서브 타입은 언제나 부모 타입으로 교체할 수 있어야 한다는 원칙
- 다형성 원리를 이용하기 위한 원칙 - ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
- 인터페이스를 각각 사용에 맞게 잘게 분리해야 한다는 설계 원칙
- 인터페이스를 사용하는 클라이언트를 기준으로 분리함으로써 클라이언트의 목적과 용도에 적합한 인터페이스를 제공하는 것이 목표 - DIP(Dependency Inversion Principle) : 의존 역전 원칙
- 어떤 클래스를 참조해서 사용해야하는 상황에 그 클래스를 직접 참조하는 것이 아니라 그 대상의 상위 요소(추상 클래스 or 인터페이스)를 참조하라는 원칙
- 클래스간의 결합도(coupling)을 낮추는 것