![post-thumbnail](https://velog.velcdn.com/images/lxn_ee/post/0eef05e1-9954-49af-8471-bd695d49adf8/image.jfif)
OOP란 ?
- 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, '객체'들의 상호작용(메시지 주고받기, 데이터 처리 등)으로 프로그램 로직을 구성
- 객체란 프로그램에서 사용되는 데이터 또는 식별자(identifier)에 의해 참조되는 공간을 의미
OOP의 특징
- 캡슐화(Encapsulation)💊
- 한 객체가 특정한 하나의 목적을 위해 필요한 데이터나 메소드를 하나로 묶는 것을 의미한다
-데이터는 외부에서 직접 접근을 하면 안되고 함수를 통해서만 접근해야 한다
- 상속(inheritance)👪
- 기존 메소드와 변수를 물려받되, 필요한 기능을 더 추가하거나 나(자식클래스)에게 맞게 재정의하는 방법
- 추상화(abstraction)🎈
- 공통의 속성이나 기능을 묶어 이름을 붙이는 것이다
→ 보통 객체 지향 프로그래밍에서 클래스를 정의하는 걸 추상화라고 생각하면 된다
- 다형성(polymorphism)🧿
- 하나의 변수명이 상황에 따라 다른 의미로 해석될 수 있다는 것을 뜻한다
- 보통 OOP에서 오버라이딩과 오버로딩을 의미
- 오버라이딩(Overriding) : 부모에게 상속받은 메소드를 자식이 재정의 하는 것
- 오버로딩(Overloading) : 메소드명이 같고 파라미터의 갯수나 타입이 다르게 정의 하는 것
OOP의 장단점
- 장점
- 모듈화를 통해 개발하기 때문에 업무분담이 편하고, 대규모 소프트웨어 개발에 적합
- 클래스단위로 수정이 가능하기에 유지 보수가 용이
- 클래스의 재사용 및 상속을 통해 확장하므로 코드 재사용이 용이
- 단점
- 처리속도가 상대적으로 느려짐
- 객체의 수가 증가함에 따라 용량이 커질 수 있음
- 설계에 많은 시간과 노력이 필요 함
- 소규모 소프트웨어 개발의 경우 오히려 복잡해 질 수 있음
OOP 5원칙(SOLID)
- 단일 책임 원칙(Single Responsibility Principle)
- 하나의 클래스는 단 하나의 책임만 가져야 한다.
- 개방 폐쇄 원칙(Open/Closed Principle)
- 소프트웨어 요소는 확장에는 열려있으나, 변경에는 닫혀 있어야 한다.
- 리스코프 치환 원칙(Liskov Substitution Principle)
- 상위 타입의 객체를 하위 타입의 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
- 인터페이스 분리 원칙(Interface Segregation Principle)
- 클라이언트의 목적과 용도에 적합한 인터페이스 만을 제공해야 한다.
- 의존관계 역전 원칙(Dependency Inversion Principle)
- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안되고, 저수준 모듈은 고수준 모듈에 의존해야 한다.
- 고수준 모듈 : 비즈니스와 관련된 추상화된 모듈
- 저수준 모듈 : HTTP, 데이터베이스, 캐시 등과 관련된 구현 모듈
- 비즈니스와 관련된 부분이 세부 사항에는 의존하지 않는 설계 원칙