객체지향 이론(Object-Oriented Theory)은 소프트웨어를 개발할 때 객체(Object)를 중심으로 프로그램을 설계하고 구현하는 이론입니다.
이러한 객체지향 이론은 현실 세계의 개념을 프로그램에 반영하여 유지보수와 확장성을 높이는 목적을 가지고 있습니다.
Table of Contents
객체지향 핵심 개념
캡슐화 (Encapsulation)
- 정의: 데이터(속성)와 그 데이터를 조작하는 메소드(행위)를 하나로 묶고, 외부에 불필요한 세부사항을 숨기는 것
- 목적: 불필요 정보를 숨겨 이후 변경에 강한 설계를 위함
- 장점: 정보 은닉, 코드 변경에 유연함, 모듈화
- 예시: private 속성, public getter/setter
상속 (Inheritance)
- 정의: 기존 클래스(부모)의 특성을 새로운 클래스(자식)가 물려받는 것
- 장점: 코드 재사용, 계층적 구조 형성
- 단점: 깊은 상속 트리는 코드의 유지 보수를 어렵게 함
다형성 (Polymorphism)
- 정의: 같은 인터페이스(메소드명)를 사용하지만 다양한 방식으로 동작하는 것
- 예시: 오버라이딩(Override: 매개변수가 다른 이름이 같은 메소드), 오버로딩(Overload: 부모의 메소드를 자식이 재정의)
추상화 (Abstraction)
- 정의: 중요한 정보만 보여주고, 불필요한 구현 세부사항은 숨기는 것
- 장점: 복잡한 시스템을 단순하게 표현, 유지보수 용이
객체지향 장점
- 코드 재사용성: 중복을 줄이고 효율적으로 코드 작성 가능
- 유지보수성 향상: 모듈화로 인해 특정 부분만 수정 가능
- 확장성: 새로운 기능 추가가 쉬움
- 현실 세계와 유사한 구조: 문제를 더 직관적으로 모델링 가능
객체지향 설계 원칙 (SOLID 원칙)
- S(Single Responsibility Principle) 단일 책임 원칙:
- 클래스는 하나의 책임만 가져야 함
- 사용자를 만들고 이메일도 보내는 두 개의 책임을 가지게 하는 것이 아니라 사용자를 만드는 클래스, 이메일 보내는 클래스 이렇게 각각 하나의 임무만 가지게 작성
- O(Open-Closed Principle) 개방-폐쇄 원칙:
- 확장에는 열려 있고, 변경에는 닫혀 있어야 함
- 하나의 메소드에 등급에 따른 할인율 계산 코드를 넣으면 등급이 추가될 경우 소스코드를 수정해야하는데, 각각의 등급별 클래스를 만들어 할인율 계산 클래스에서 처리하게 하면 등급이 추가 돼도 클래스만 추가하면 됨
- L(Liskov Substitution Principle) 리스코프 치환 원칙:
- 자식 클래스는 부모 클래스를 대체할 수 있어야 한다
- 조류 클래스를 상속하는 경우 fly 메소드가 조류 클래스에 있으면 이를 상속받은 타조 클래스는 깨짐
- fly 메소드는 Flyable 인터페이스로 만들어 참새 클래스만 구현하고 타조 클래스에는 구현하지 않음
- I(Interface Segregation Principle) 인터페이스 분리 원칙:
- 하나의 인터페이스는 하나의 역할만 가져야 한다
- 인터페이스에 여려 기능이 있으면 사용하지 않는 기능도 구현해야하는 경우 발생
- D(Dependency Inversion Principle) 의존 역전 원칙:
- 구체가 아닌 추상에 의존해야 한다
- 클래스에 MySQL 구현을 직접 넣지 말고 DB 마다의 기능 구현 클래스를 따로 만들어 기능 사용