객체지향 프로그래밍(OOP)은 현실 세계의 개념을 프로그램으로 모델링하는 데 초점을 맞춘 프로그래밍 패러다임이다.
이를 위해 객체지향은 다음과 같은 4가지 핵심 요소를 활용한다.
복잡한 시스템을 단순화하여 핵심적인 특징만을 추출하는 과정
예: 자동차를 추상화하면 바퀴, 엔진, 몸체 등의 속성과 이동, 정지 등의 기능으로 표현할 수 있다.
데이터(속성)와 그 데이터를 처리하는 함수(메소드)를 하나의 단위로 묶어 외부에서의 직접적인 접근을 제한하는 것을 의미한다.
데이터의 무결성을 보장하고, 코드의 복잡도를 줄이며, 유지보수를 용이하게 한다.
기존 클래스의 속성과 메소드를 상속받아 새로운 클래스를 정의하는 것이다.
코드 재사용성을 높이고, 계층적인 클래스 구조를 형성하여 코드의 관리를 용이하게 한다.
하나의 인터페이스를 통해 다양한 객체를 사용할 수 있도록 하는 것이다.
오버로딩(Overloading)과 오버라이딩(Overriding)을 통해 구현된다.
객체지향 설계를 효과적으로 수행하기 위해서는 SOLID 원칙을 따르는 것이 중요합니다. SOLID는 다음과 같은 5가지 원칙의 첫 글자를 따서 만들어진 약자이다.
클래스는 하나의 책임만 가져야 한다.
하나의 클래스가 여러 가지 일을 하게 되면 변경이 발생할 때 다른 부분에도 영향을 미쳐 유지보수가 어려워진다.
확장에는 열려 있어야 하지만, 변경에는 닫혀 있어야 한다.
새로운 기능을 추가할 때 기존 코드를 변경하지 않고 확장할 수 있어야 한다.
자식 클래스는 언제든지 부모 클래스로 대체될 수 있어야 한다.
자식 클래스가 부모 클래스의 기능을 변경하거나 예외적인 동작을 하면 안 된다.
클라이언트는 자신이 사용하지 않는 메소드에 의존하지 않아야 한다.
하나의 거대한 인터페이스보다는 작고 특정한 역할을 하는 여러 개의 인터페이스로 분리하는 것이 좋다.
고수준 모듈은 저수준 모듈에 의존하지 않아야 하며, 둘 다 추상화된 인터페이스에 의존해야 한다.
의존성을 반전시켜 시스템의 유연성을 높이고 결합도를 낮출 수 있다.