객체 지향 프로그래밍의 특징
먼저, 객체 지향의 프로그래밍 특성 4가지에 대해서 생각하고 넘어가도록 하자!
추상화
객체에서 공통된 속성과 행위를 추출 하는 것 → 추상화를 해두면 코드 구현할 때 생각할 것들을 줄일 수 있다.
추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만드는 것
캡슐화
데이터 구조와 데이터를 다루는 방법들을 결합 시켜 묶는 것 (변수와 함수를 하나로 묶는 것을 뜻함) 캡슐화 함으로써 정보 은닉이 가능함.
상속
클래스의 속성과 행위를 하위 클래스에 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것을 의미한다.
다형성
하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것 어떠한 요소에 여러 개념을 넣어 놓아야 한다.
객체 지향 프로그래밍을 하면서 지켜야하는 5대 원칙을 SOLID라고 한다.
이는 시간이 지나도 변경이 용이하고해야하며 유지보수와 확장이 쉬워야 한다.
즉, 다형성과 추상화가 지켜져야 한다.
한 클래스는 한 가지의 역할만 하도록 설계해야 한다.
코드를 변경할 때 고쳐야할 부분이 적다면 단일 책임 원칙을 잘 따른 것이라고 볼 수 있다.
개방 폐쇄 원칙(Open-Closed Principle, OCP)은 확장에 대해 열려있고 수정에 대해서는 닫혀있어야 한다는 원칙으로, 각각이 갖는 의미는 다음과 같다.
확장에 대해 열려 있다: 요구사항이 변경될 때 새로운 동작을 추가하여 애플리케이션의 기능을 확장할 수 있다.
수정에 대해 닫혀 있다: 기존의 코드를 수정하지 않고 애플리케이션의 동작을 추가하거나 변경할 수 있다.
프로그램의 객체는 프로그램의 정확성을 깨지 않으면서 하위 타입의 인스턴스로 교체 가능해야 한다.
하위 타입은 상위 타입을 대체할 수 있어야 한다.
해당 객체를 사용하는 클라이언트는 상위 타입이 하위 타입으로 변경되어도, 차이점을 인식하지 못한 채 상위 타입의 퍼블릭 인터페이스를 통해 서브 클래스를 사용할 수 있어야 한다.
특정 클라이언트를 위한 인터페이스를 여러 개 구성하는 것이 범용 인터페이스 하나를 구성하는 것보다 낫다.
클라이언트의 목적과 용도에 적합한 인터페이스 만을 제공해야 한다.
의존 역전 원칙이란 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 되며, 저수준 모듈이 고수준 모듈에 의존해야 한다는 것이다. 객체 지향 프로그래밍에서는 객체들 사이에 메세지를 주고 받기 위해 의존성이 생기는데, 의존성 역전의 원칙은 올바른 의존 관계를 위한 원칙에 해당된다. 여기서 각각 고수준 모듈과 저수준 모듈이란 다음을 의미한다.
고수준 모듈: 입력과 출력으로부터 먼(비즈니스와 관련된) 추상화된 모듈
저수준 모듈: 입력과 출력으로부터 가까운(HTTP, 데이터베이스, 캐시 등과 관련된) 구현 모듈