'추상화의 장점이 뭘까요?'라는 질문에 자신있게 대답하지 못했다.
알고 있다고 생각했지만 대답을 잘 못했다. 그럼 모르는거다.
그래서 관련된 것들과 함께 복습겸 정리한다.
OOP(Object-Oriented Programming)
- 객체 지향 프로그래밍
- 프로그램을 객체라는 단위로 나누어 구성하는 방식
OOP의 5원칙 SOLID
S (SRP : Single Responsibility Principle)
- 단일 책임 원칙
- 한 클래스는 하나의 책임만 가져야 한다.
O (OCP : Open-Closed Principle)
- 개방-폐쇄 원칙
- 확장에는 열려있으나, 변경에는 닫혀있어야 한다.
- 즉, 기존 코드를 변경하지 않고도 기능을 추가할 수 있도록 설계해야 한다.
L (LSP : Liskov Substitution Principle)
- 리스코프 치환 원칙
- 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
- 즉, 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다.
I (ISP : Interface Segregation Principle)
- 인터페이스 분리 원칙
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용적인 인터페이스 하나보다 낫다.
- 즉, 클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않도록 인터페이스를 분리해야 한다.
D (DIP : Dependency Inversion Principle)
- 의존 역전 원칙
- 추상화에 의존한다. 구체화에 의존하면 안된다.
OOP의 4특성
1. 추상화 (Abstraction)
- 객체의 세부 사항을 숨기고 필요한 기능을 외부에 제공하는 개념
- 공통적인 속성과 기능을 정의하는 것
- 추상 클래스(abstract class)와 인터페이스(interface)를 통해 구현
- 장점
- 코드의 중복을 줄임
- 클래스 간 관계를 효과적으로 설정
- 유지/보수 용이
- 단점
- 적절한 추상화 수준 설정이 어려움
- 구현이 복잡해질 수 있음
2. 캡슐화 (Encapsulation)
- 객체의 데이터를 외부에서 접근하지 못하도록 한다.
- 객체의 내부 구현을 외부로부터 숨긴다.
- 객체와 관련된 데이터는 메서드(getter, setter)를 통해서만 접근이 가능하다.
- 접근제어자
- public : 어디서나 접근 가능
- protected : 같은 패키지 또는 다른 패키지의 서브 클래스에서 접근 가능
- default : 같은 패키지에서만 접근 가능
- private : 해당 클래스에서만 접근 가능
3. 상속 (Inheritance)
- 자식 클래스가 부모 클래스의 특성과 기능을 물려받아 재사용하고 확장하는 개념
4. 다형성 (Polymorphism)
- 어떤 변수, 메서드가 상황에 따라 다른 결과를 내는 것
- 주로 오버로딩과 오버라이딩을 통해 구현
- 오버로딩(Overloading)
- 하나의 클래스에서 메서드의 이름이 같지만, 다른 매개변수 목록을 가지도록 하는 것
- 오버라이딩(Overriding)
- 부모 클래스의 메서드를 자식 클래스의 용도에 맞게 재정의하여 코드의 재사용성을 높임