객체 지향 프로그래밍(Object-Oriented Programming, OOP)
객체 지향 프로그래밍은 프로그램을 '객체'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 프로그래밍 방식입니다.
한 줄 정리
기능단위로 분리되어있어 블럭과 같아 새로운 기능을 만들 때는 새로운 블럭을 끼우면 되고, 수정을 할 때는 그 블럭만 바꾸면 된다.
장점
- 재사용성이 높다.
- 생산성이 좋다.
- 자연스러운 구조.
- 유지보수의 우수성.
핵심 요소
- 캡슐화(Encapsulation) = 정보 은닉
- 같은 기능을 목적으로 하는 코드를 모아 다른 곳에 안보이게 숨김.
- 내부 사용:
private
- 객체가 수행할 공개적 기능:
public
- 상속(Inheritance) = 재사용 + 확장
- 자식 클래스는 부모 클래스의 속성, 기능 사용 가능.
- 다형성(Polymorphism) = 사용 편의
- 하나의 객체가 여러 형태를 가질 수 있음.
- 오버라이딩: 자식에서 재정의하여 사용.
- 오버로딩: 같은 이름의 다양한 기능(인자값의 종류, 개수 등이 다름).
SOLID 원칙
-
단일 책임 원칙 (Single Responsibility Principle, SRP)
- 클래스는 단 하나의 책임만 가져야 한다.
- 클래스는 변경의 이유가 하나여야 한다.
-
개방-폐쇄 원칙 (Open-Closed Principle, OCP)
- 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
- 기존의 코드를 수정하지 않고도 새로운 기능을 추가할 수 있어야 한다.
-
리스코프 치환 원칙 (Liskov Substitution Principle, LSP)
- 자식 클래스는 언제나 부모 클래스로 교체할 수 있어야 한다.
-
인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
- 클라이언트는 자신이 사용하지 않는 인터페이스에 의존하지 않아야 한다.
- 클라이언트가 자신이 필요로 하는 기능만 있는 인터페이스를 사용할 수 있도록 인터페이스를 분리해야 한다.
-
의존 역전 원칙 (Dependency Inversion Principle, DIP)
- 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 모두 추상화에 의존해야 한다.
- 사용자가 상속관계로 이루어진 모듈을 사용할 때는 직접 인스턴스를 사용하지 않고 추상화에 의존해야 한다.