객체지향(OOP)이란?
- 코드를 적절히 잘 분류할 수 있어야한다.
- 경우에 따라 특정 모듈을 통째로 변경해야 할 수도 있다.
클래스(Class)
- 프로그램의 코드를 체계적으로 분류할 수 있다.
- 같은 역할을 하는 코드를 응집성있게 모아준다.
유지보수
- OracleDB에서 MysqlDB로 변경하거나, RDB를 NoSQL로 변경하는 등과 같이 시스템이 교체되는 경우를 의미한다.
- 소프트웨어를 수정이 쉽게 유지하는 것은 쉽지 않아, 다수의 기능을 구현하며 수정하다보면 꼬이는 소스가 발생한다.
수정이 어려운 이유
- 기능이 복잡하게 섞여있어 어디를 어떻게 고쳐야할 지 파악이 어렵다.
- 기능 추가 후에 기존에 잘 수행되던 기능들이 갑자기 동작이 되지 않는 경우가 있다.
- 수정한 부분과 전혀 상관없는 곳이 갑자기 잘못 동작하는 경우가 있다.
객체지향의 기본 원칙
캡슐화 (Encapsulation)
- 데이터와 메서드를 하나의 단위인 객체로 묶고, 객체의 내부 상태를 외부에서 직접 접근하지 못하도록 숨기는 원칙을 의미한다.
- 데이터의 무결성을 보호하고, 객체의 내부 구현이 변경되더라도 외부에는 영향을 주지 않도록 한다.
상속 (Inheritance)
- 기존 클래스(부모 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스)가 물려받는 원칙을 의미하며, 상속을 통하여 클래스 간의 계층 구조를 정의할 수 있다.
- 코드의 재사용성을 높이고, 공통된 기능을 상위 클래스에서 정의하여 하위 클래스에서 상속받도록 한다.
다형성 (Polymorphism)
- 동일한 메서드나 연산이 다양한 객체에서 다르게 동작할 수 있는 능력을 의미하며, 메서드 오버로딩과 메서드 오버라이딩을 통해 구현할 수 있다.
- 인터페이스를 통합하여 다양한 객체가 동일한 메서드 호출에 대해 각기 다른 동작을 수행할 수 있게 한다.
추상화 (Abstraction)
- 복잡한 시스템에서 중요하고 본질적인 특성만을 모델링하여 복잡성을 숨기고 단순화하는 원칙을 의미하며, 추상 클래스와 인터페이스를 사용하여 구현할 수 있다.
- 불필요한 세부 사항을 숨기고, 객체의 핵심 기능만을 드러내어 사용자와 개발자 모두가 더 쉽게 이해할 수 있도록 한다.
객체지향 프로그래밍
- 데이터(상태, Field)와 로직(행위, Methods)이 응집되어 상호 교류하며 동작하도록 만드는 프로그래밍 기법을 말한다.
⊙ 참고 문헌
- 양세열, 「백엔드 취업 파트타임 스쿨 5기:Part 07. 스프링 프레임워크-Chapter 02. OOP와 스프링 프레임워크-01. 객체지향 프로그래밍(OOP)을 왜 하는 지 생각해봅시다-1」, 제로베이스, 2024, https://zero-base.co.kr/
- 양세열, 「백엔드 취업 파트타임 스쿨 5기:Part 07. 스프링 프레임워크-Chapter 02. OOP와 스프링 프레임워크-01. 객체지향 프로그래밍(OOP)을 왜 하는 지 생각해봅시다-2」, 제로베이스, 2024, https://zero-base.co.kr/
- ChatGPT, " OOP의 기본 원칙"에 대한 답변, 2024년 09월 17일, https://chatgpt.com/